【发布时间】:2017-03-10 08:45:51
【问题描述】:
我有这个AddUser 组件,它是一个简单的组件,它从下拉列表中获取一个电子邮件地址和一个角色,然后将这两个值传递给父组件。除了一件事之外,一切都很好:如果我首先输入电子邮件地址然后选择角色onChange() 不会从下拉列表中获取值并将 null 传递给父组件。但如果我先选择角色然后输入电子邮件,onChange() 会同时获得这两个值!我该如何解决?
这个组件有 3 个属性:roles 是一个字典,我正在从它创建 rolesList 以将其用作 DropdownList 的数据(它来自 react-widget,https://jquense.github.io/react-widgets/docs/#/?_k=3fo3eq)。第二个属性是handleChange(),它设置父组件的状态。第三个是handleAddNewUser(),它将值从表单返回到父组件。
export const AddUser = React.createClass({
getInitialState() {
return {
email: "",
selectedRole: "",
};
},
onChange() {
var email = this.email.value;
this.props.handleChange(email, this.state.selectedRole);
},
render() {
var rolesList = [];
for(var key in this.props.roles){
rolesList.push(key);
}
return(
<div >
<form onSubmit={this.props.handleAddNewUser}>
<label >New user email address:</label>
<input ref={(ref) => this.email = ref} name='email' type='email' onChange={this.onChange} required />
<label >Choose a role for new user:</label>
<DropdownList data={rolesList} value={this.state.selectedRole} name='rolesList' onChange={selectedRole => this.setState({ selectedRole })} />
<button type="submit" >Add user</button>
</form>
</div>
);
},
});
更新:这是来自父组件的代码,handleChange() 设置父组件的状态。 handleAddNewUser() 应该使用状态并发出 ajax 请求来创建新用户。现在它对newUserEmail 有价值,但对newUserRole 没有价值
handleChange(email, selectedRole){
this.setState({newUserEmail: email})
this.setState({newUserRole: selectedRole})
},
handleAddNewUser(e) {
e.preventDefault();
// using its state, it supposed to make an ajax request and create a new user
}
【问题讨论】:
标签: javascript forms reactjs