componentWillUpdate - 修改nextProps或nextState是否安全?

时间:2017-04-26 18:05:30

标签: reactjs

这样做有什么意义?

class Foo extends React.Component {
    componentWillUpdate(nextProps, nextState) {
        nextState.bar = transformSomehow(nextState.foo);
    }
}

我的直觉告诉我这是错的,但我还没有找到任何文件说nextPropsnextState应该是只读的,我也没有发现任何说这是确定。

这里的想法是我想从州获得某种消毒/转换/修改的数据版本。可能还有很多其他(更好)的方法可以做到这一点,但这也是一个可行的选择吗?

1 个答案:

答案 0 :(得分:2)

我会说这不是一种理想的方法,因为你试图改变状态。您不应该在setState内拨打componentWillUpdate,也不应该在此时尝试更新您的州对象。此阶段更多地用于动画,DOM操作等。

如果你想根据nextState设置一些其他的变量,那就去吧。如果你想工作的特殊状态副本来完成某件事,那一切都很好。但我认为在这种方法中尝试改变状态与这种生命周期方法的预期用法背道而驰。来自componentWillUpdate上的文档:

  

请注意,您无法在此处调用this.setState()。如果您需要更新状态以响应prop更改,请改用componentWillReceiveProps()。