我正在创建一个包含三个输入字段的表单,我想将状态更改为已输入的内容。不必编写三个单独的函数来处理所有三个输入,而是有一种方法可以根据用户选择填写的字段来设置状态?
先谢谢了。
handleChange = e => {
this.setState({
//Can this be changed to target the right field in the state// : e.target.value
})
}
render() {
return (
<div>
<div>
<label htmlFor="name">Name:</label>
<input
type="text"
value={this.state.name}
onChange={this.handleChange}
/>
</div>
<div>
<label htmlFor="county">County:</label>
<input
type="text"
value={this.state.county}
onChange={this.handleChange}
/>
</div>
<div>
<label htmlFor="position">Position:</label>
<input
type="text"
value={this.state.position}
onChange={this.handleChange}
/>
</div>
<button>Submit Player</button>
</div>
)
}
答案 0 :(得分:3)
这是代码
handleChange = e => {
this.setState({
[e.target.name]: e.target.value
});
}
render() {
return (
<div>
<div>
<label htmlFor="name">Name:</label>
<input
type="text"
name="name"
value={this.state.name}
onChange={this.handleChange}
/>
</div>
<div>
<label htmlFor="county">County:</label>
<input
type="text"
name="county"
value={this.state.county}
onChange={this.handleChange}
/>
</div>
<div>
<label htmlFor="position">Position:</label>
<input
type="text"
name="position"
value={this.state.position}
onChange={this.handleChange}
/>
</div>
<button>Submit Player</button>
</div>
)
}
答案 1 :(得分:1)
而不是依赖DOM中的任何内容来标识要更新的元素-这并不是React的最佳实践,因为它混淆了状态和模型真相的来源,您应该完全将表单抽象化变成数据结构:
state = {
formInputs: [
{
name: 'Name',
type: 'text',
value: '',
},
{
name: 'Country',
type: 'text',
value: '',
},
{
name: 'Position',
type: 'text',
value: '',
},
]
};
handleChange = (evt, n) => {
this.setState((state) => {
const arr = state.formInputs.slice();
arr[n] = {value: evt.target.value, ...arr[n]};
return {formInputs: arr};
});
}
render() {
return (
<div>
{this.state.formInputs.map((ea, i) => {
return (
<div key={ea.name} >
<label htmlFor={ea.name}>{`${ea.name}:`}</label>
<input {...ea} onChange={(e) => {this.handleChange(e, i)}} />
</div>
);
})}
<button>Submit Player</button>
</div>
);
}
将数据/输入及其值存储在抽象组件状态中,然后使用Array.map()
将它们转换为呈现的UI,这是React中非常常见且有用的模式。
优势: