【发布时间】:2018-05-22 15:50:39
【问题描述】:
我正在显示一个下拉选择菜单项,其中显示了维生素列表,但我希望它更新为用户选择的新维生素。
我试过了
renderData(handleChange) {
const {vitamins} = this.state.data;
return vitamins.map((micro, index) => {
return (
<option value="" key={index}>{micro.name}</option>
)
})
}
这个不会改变状态。
和
renderData() {
this.handleChange();
const {vitamins} = this.state.data;
return vitamins.map((micro, index) => {
return (
<option value="" key={index}>{micro.name}</option>
)
})
}
这个返回 TypeError: Cannot read property 'target' of undefined.
这是我的完整代码:
constructor(props) {
super(props);
this.state = {
value: '',
data: data.nutrients,
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e) {
this.setState({
value: e.target.value,
});
}
renderData() {
this.handleChange();
const {vitamins} = this.state.data;
return vitamins.map((micro, index) => {
return (
<option value="" key={index}>{micro.name}</option>
)
})
}
return (
<form onSubmit={this.handleSubmit}>
<label className="nutrient-label">
Vitamins
<select value={this.state.value} onChange={this.handleChange}>
{this.renderData()}
</select>
</label>
</form>
【问题讨论】:
-
您的错误是因为您在
renderData中调用handleChange,但您没有将e传递给handleChange。所以它无法读取未定义的目标 -
@BrettEast 我不是在谈论
onClick处理程序。它里面的那个可以正常工作。查看renderData函数的内部。该函数正在调用handleChange。如何将e从renderData传递到handleChange?
标签: reactjs function events ecmascript-6 callback