[英]Using a single handleInputChange method to for multiple input fields (React)
我有一个表格,在React“
render() {
return (
<div>
<form onSubmit={this.onFormSubmit}>
<input
value={this.state.first}
/>
<input
value={this.state.second}
/>
<input
value={this.state.third}
/>
//.... many more
</form>
//...
)}
我的handleInputChange
通常如下所示:
handleInputChange(e) {
this.setState({value: e.target.value });
}
现在,由于我有许多不同的输入字段,我通常会做许多不同的handleInputChange
方法。 但是,所有这些处理输入更改的事情基本上都是相同的:它们根据当前编辑的输入字段重新设置状态。
我怎么可能,而不是写三个handleInputChange
方法,每个方法做的事情如下:
handleInputChangeFirst(e) {
this.setState({first: e.target.value });
}
handleInputChangeSecond(e) {
this.setState({second: e.target.value });
}
...使用一个handleInputChange
执行所有这些handleInputChange
,然后检查哪个值需要更新? 我怎样才能让handleInputChange
了解正在编辑的输入字段并做出相应的反应?
你可以有一个通用的handleInputChange
方法:
handleInputChange(property) {
return e => {
this.setState({
[property]: e.target.value
});
};
}
您可以这样使用:
<input
value={this.state.first}
onChange={this.handleInputChange('first')}
/>
如果我错了,请纠正我,但上述方法不会为每个渲染返回一个新函数吗? 因此,如果您将这些处理程序传递给子组件,那么它们每次都会被视为更新的prop,而不是相同的prop(因为它是每个渲染的新函数),并导致不必要的重新渲染子项。 内联函数的一个原因是在渲染方法中讨厌。
这是我在网上看到的另一个解决方案:
handleInputChange = event => {
const { name, value } = event.target;
this.setState({
[name]: value
});
}
和输入元素:
<input name="first" value={this.state.first} onChange={this.handleInputChange} />
名称可能不是最好使用的属性,但您明白了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.