Javascript 如何在reactJS中“更新”状态?
我有这个 -Ajax回调:Javascript 如何在reactJS中“更新”状态?,javascript,json,reactjs,react-jsx,Javascript,Json,Reactjs,React Jsx,我有这个 -Ajax回调: success:function(data) { self.setState({ user: { id_user: data.session.id_user, firstname_user: data.session.firstname_user, lastname_user:
success:function(data) {
self.setState({
user: {
id_user: data.session.id_user,
firstname_user: data.session.firstname_user,
lastname_user: data.session.lastname_user,
action: "updateUser"
},
});
}
-和手动更改我的输入:
handleChange(){
this.setState({
user: {
firstname_user: this.firstname_user.refs.input.value,
lastname_user: this.lastname_user.refs.input.value
}
});
}
请给出:
console.log(this.state.user);
/*
user
firstname_user: "Blablabla"
lastname_user: "Blablabla"
*/
相反,这是:
console.logthis.state.user
/*
user
id_user: XX
firstname_user: "Blablabla"
lastname_user: "Blablabla"
action: "updateUser"
*/
激发handleChange时,this.state.user将删除id\u用户和操作键。因此,this.state.user只留下firstname\u user和lastname\u user。为什么?
我没有删除任何密钥,所以我不明白为什么
请问如何解决这个问题
感谢setStatenextStateObject执行nextStateObject到当前状态的浅层合并,因此在您的情况下,类似state.user的嵌套对象不会被扩展,而是被覆盖。您可以使用Object.assign解决问题:
handleChange(){
let updatedUser = Object.assign({}, this.state.user, {
firstname_user: this.firstname_user.refs.input.value,
lastname_user: this.lastname_user.refs.input.value
});
this.setState({
user: updatedUser
});
}
请检查setState方法的React。setStatenextStateObject执行将nextStateObject浅合并到当前状态的操作,以便不会扩展嵌套对象(如state.user),而是覆盖它们。您可以使用Object.assign解决问题:
handleChange(){
let updatedUser = Object.assign({}, this.state.user, {
firstname_user: this.firstname_user.refs.input.value,
lastname_user: this.lastname_user.refs.input.value
});
this.setState({
user: updatedUser
});
}
请检查设置状态方法的反应。@AndrewLi是正确的。setState设置对象的状态,而不是更新它。我想你也可以看看这个复制品@纽帕特里克是的,这是一种更好的复制目标的方法。@AndrewLi是对的。setState设置对象的状态,而不是更新它。我想你也可以看看这个复制品@是的,这是一个更好的复制目标的方法。