我只是用更通用的方式处理表单数据,并认为在包装表单标记上设置单个onChange
侦听器应该适用于输入字段的所有更改。
事实上,确实如此 - 毫不奇怪。事件被调用,我知道通过检查event.target.name
发生了什么变化并且可以相应地更新状态。完全符合预期。
然而,React似乎并不喜欢它并且使用众所周知的“你向表单字段提供value
道具而没有onChange
处理程序”控制台警告。
除了控制台警告之外,还有其他原因可以不这样做吗?它似乎消除了很多重复,否则React会受到批评。
class App extends Component {
state = {
name: 'Default Name',
number: 12,
}
handleChange = (event) => {
this.setState({
[event.target.name]: event.target.value,
})
}
render() {
const { crashLogo } = this.props;
return (
<div className="App">
<form onChange={this.handleChange}>
<input type="text" name="name" value={this.state.name} />
<input type="number" name="number" value={this.state.number} />
</form>
</div>
);
}
}
为了清楚起见:我不是要求其他解决方案,我知道我可以直接在每个输入上设置相同的更改侦听器,使用redux-form
,拥有context
魔法的自有包装组件等等...