在我的React应用程序(版本15.4.2)中,我使用JavaScript更新文本输入字段的值 - 但是,我将字段与
onChange
事件监听器相关联,更改输入字段的值不会触发处理程序(当然,传统的在输入字段中打字可以),尽管字段的内容已正确更新。constructor(props) {
super(props);
this.onChange = this.onChange.bind(this);
}
onChange(event){
let attribute = event.target.name;
let updatedGroup = this.state.group;
updatedGroup[attribute] = event.target.value;
this.setState({group: updatedGroup});
}
addMember(memberId) {
let inputField = document.getElementById("members");
let inputValues = inputField.value.split(",");
inputField.value = [...inputValues, memberId];
}
render(){
<input type="text" id="members" name="members" value={this.state.group.members} onChange={this.onChange} />
}
当调用addMember()
函数(通过子组件中的按钮单击)时,输入框本身的内容将被正确更新,但onChange
不会被调用,因此状态不会被更新等等...
有没有一种方法可以编程方式设置输入框的值并触发onChange
?
addMember()
是你正在公开的公共方法吗?为什么你需要使用方法而不是简单地传递props?在React中,你应该抵制直接操作DOM的冲动,就像你现在所做的那样。也就是说,在这里使用document.getElementById
是没有必要的。 - ericgioaddMember
函数,并将其ID添加到输入列表中,以便状态(最终,数据库)将被更新以反映此新用户。 - skwidbreth