没有setState修改状态的风险是什么?

Jac*_*chi 6 javascript reactjs

我知道直接修改状态而setState(...)不会自动更新UI,但我仍然可以这样做:

this.state.myValue = "foo";
this.forceUpdate();
Run Code Online (Sandbox Code Playgroud)

我也知道React等待某些时刻在一次通过中更新几个组件,但是有没有令人信服的理由为什么我不应该直接改变状态setState(...)

有两种情况直接改变状态对我有益:

  • 如果我必须修改一个非常长的数组的元素,setState(...)那么与每次复制整个数组的非浅的性能增益相比,"集群更新" 的性能增益可以忽略不计.

  • 如果我在状态的2个不同属性中有2个对同一对象的引用,并且我想修改此对象,我宁愿对单个属性进行此修改,但如果我使用setState(...),则会复制该对象并丢失引用.

谢谢您的帮助.

Ani*_*mar 1

如果直接修改状态,同时其他一些逻辑也会更新状态。不能保证您具有正确的状态或其他逻辑具有正确的状态。

它可能会给您带来不可预测的结果和行为。因此,始终建议仅使用 setState(),因为这是异步的,并且状态更新是不可变的。