我读过关于setState的ReactJS文档。具体来说,这一行:ReactJS:为什么我不应该改变嵌套状态?
不要直接改变this.state,因为之后调用setState()可能会替换您所做的突变。将this.state视为不可变的。
但在我的代码,我做这样的事情:
var x = this.state.x;
x.y.z.push("foo"); // z is a list
this.setState({x:x});
此代码似乎工作,正确地更新状态。但根据文件,我打破了规则。这种方法有什么问题?有没有性能问题?比赛条件?我会被Facebook开发团队骂吗?理想情况下,我想避免不可修复助手和所有其他疯狂并保持简单。
改为使用this.forceUpdate()。或者使用React.addons.update来实现相同的结果。 –
事情现在可能似乎有效。但是,这很可能会让位于稍后难以调试的问题。不可变规则确实是(强烈的)鼓励,决不允许组件访问比它需要更多的信息。如果你的组件需要知道xyz,而不是x或xy,那么在你的状态'var z = this.state.z'和'this.setState({z:z.concat(['foo'])} )'(通过道具初始化z)。如果外部世界需要知道z中的更改,则派发一个更改事件,以便触发父组件中x的更新或触发更新存储的操作。 – widged