【发布时间】:2019-01-07 00:55:06
【问题描述】:
我的问题很容易理解。
我所在的州有一个用户列表。由数据库调用填充。 当单击用户列表中的元素时,我还填充了一个 selecteduser。
当单击用户列表中的此元素时,将打开一个模式,其中输入的默认值由 selecteduser 填充。
我为这些输入分配了 onChange 函数,然后每个更改都保存在 selecteduser 中。
但问题是,每个更改也保存在用户列表中,我真的不明白为什么。
除了来自数据库的数据调用之外,这个用户列表在代码中没有任何 setState。
class Users extends Component {
constructor(props) {
super(props);
this.state = {
userlist: [],
selecteduser: [],
IsModalUserVisible: false
};
}
然后调用userlist存储数据。
componentWillMount() {
db.collection("user")
.get()
.then(collection => {
this.setState({
userlist: collection.docs.map(doc => doc.data())
});
});
}
这是来自输入的 onChange
handleChangeEmail(event) {
event.preventDefault();
const selectedUserUpdate = this.state.selecteduser;
selectedUserUpdate.email = event.target.value;
this.setState({
selecteduser: selectedUserUpdate
});
}
这里调用了一个用户列表元素的 onClick 函数。
UserSelected(user) {
this.setState({
selecteduser: user,
IsModalUserVisible: true
});
}
显示用户列表的 userlist.map。
{this.state.userlist.map(user => {
return (
<UserItem
callback={() => this.UserSelected(user)}
key={user.email}
email={user.email}
/>
);
})}
最后,用户管理模式,点击用户列表元素打开。
<ManageUserItem
isOpen={this.state.IsModalUserVisible}
email={this.state.selecteduser.email}
changeEmail={this.handleChangeEmail.bind(this)}
/>
所以,当我更改输入中的电子邮件时,我可以在后台看到列表也发生了变化。我检查了 handleChangeEmail 中的 console.log(this.state.userlist),我可以看到用户列表也更新了。
我想清楚,但我希望它不会太长。
提前致谢:)
【问题讨论】:
标签: javascript reactjs state