您可以使用受控输入或非受控输入。下面是每个解决方案的示例。
在我发布之前,请允许我为您添加一些有用的提示和链接:
我已经改变了您的使用方式,refs
因为您的方法现在已被弃用和不鼓励使用。请看这篇文章。此外,您几乎可以肯定refs
这里不需要任何东西;请考虑删除它们。
您没有将key
props用于您正在映射的项目。我也加了。请看这个帖子
您可能还需要阅读有关控制VS不受控制的投入。这是我不久前发表的另一篇相关帖子。
您不小心value
为复选框添加了两个props。
解决方案
受控
添加一个状态变量,每次选择单选按钮时都会切换该变量。就像是:
constructor() {
super();
this.state = {checkedRadio: null};
}
changeRadio(e) {
this.setState(checkedRadio: e.target.value);
}
var options = [{id:1,nm:"Appointment fixed"},{id:2,nm:"Call later"},{id:3,nm:"Wrong number"},{id:4,nm:"Don't call again"},{id:5,nm:"Call later"}];
{options.map((item,i) => {
return (
<div key={item.id} onChange={(i)=>this.callOptions(i)}>
<label className="radio-inline"><input type="radio" checked={this.state.checkedRadio == i} ref={(el) => this["myRadioRef" + i] = el} value={item.id} onChange={this.changeRadio} />{item.nm}</label>
</div>
);
})}
不受控制
另一种选择是使用不受控制的输入。您需要对现有代码做的就是name
向您的输入添加一个props。所以像:
var options = [{id:1,nm:"Appointment fixed"},{id:2,nm:"Call later"},{id:3,nm:"Wrong number"},{id:4,nm:"Don't call again"},{id:5,nm:"Call later"}];
{options.map((item,i) => {
return (
<div key={item.id} onChange={(i)=>this.callOptions(i)}>
<label className="radio-inline"><input type="radio" name="myRadio" ref={(el) => this["myRadioRef" + i] = el} value={item.id} onChange={this.changeRadio} />{item.nm}</label>
</div>
);
})}