我是React的新手,想知道是否可以使用单个事件处理程序来设置许多输入的状态。也就是说,我不确定如何从输入到处理程序中获取状态“键”。
import React from 'react';
class User extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef();
this.state = {
id: props.id,
firstName: props.firstName,
lastName: props.lastName,
email: props.email,
};
}
// how do I (can I) use this single handler to independently change the state of multiple inputs?
handleChange(e) {
this.setState({ this.state.key // wrong!: this.inputRef.current.value });
}
render() {
return (
<div>
<input type="text" ref={this.inputRef} id={`first_${this.state.id}`} value={this.state.firstName} onChange={this.handleChange.bind(this)} />
<input type="text" ref={this.inputRef} id={`last_${this.state.id}`} value={this.state.lastName} onChange={this.handleChange.bind(this)} />
<input type="email" ref={this.inputRef} id={`email_${this.state.id}`} value={this.state.email} onChange={this.handleChange.bind(this)} />
// imagine ten more inputs
</div>
)
}
}
答案 0 :(得分:1)
您要尝试的操作与JS事件处理更多相关。
handleChange(event) {
const {name, value} = event.target;
this.setState({
[name]: value
});
}
event.target
是触发该事件的元素(按钮,文本区域,
等。),您可以从中获取所需的任何属性(名称,
类型,值等。)setState
内,您必须使用类似的方法
状态名称改为元素名称属性的名称。对于代码
您提供的代码段可以在第一个输入中添加名称属性
标签<input name = "firstName" .... />
,依此类推。render()
方法内绑定您的处理程序,因为每次渲染时,全新的函数返回的正确绑定方法之一就是在constructor()
方法内。