我已经阅读了关于 setState 的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.setState并且它们声称您可以通过直接分配给对象来覆盖数据。
this.setState
另外,通常在OOP中(我不知道JS能获得多少颗星星…),您将使用getter和setter方法,而不是直接操作对象。在这个例子中this.state.prop1 = "xyz";
this.state.prop1 = "xyz";
我从来没有反应过覆盖我直接设置的状态属性。用这种方式编码的诱惑可能会写到状态,而无需重新渲染。但是,如果您这样做了,您可能会考虑不要将它们置于任何状态。
如果重新渲染性能是一个问题,请查看https://facebook.github.io/react/docs/component- specs.html#updating- shouldcomponentupdate