我在应用程序的许多地方都使用componentWillReceiveProps
。现在,我必须用getDerivedStateFromProps()
或componentDidUpdate()
替换它们。首先,我想到使用getDerivedStateFromProps
作为componentWillReceiveProps
的替代品,作为建议的react-native
文档。但有些人强烈建议不要使用这种方法,而是建议使用componentDidUpdate
。但根据我的要求,所有新道具必须在渲染前设置state
。getDerivedStateFromProps
是这样做的最佳场所
因此,在getDerivedStateFromProps
和componentDidUpdate
之间使用哪一个?
来自React文档
https://reactjs.org/docs/react-component.html#static-从道具获取导出状态
getDerivedStateFromProps
在调用渲染方法之前立即调用,无论是在初始装载还是在后续更新中。它应该返回一个对象来更新状态,或者返回null来不更新任何内容。
派生状态会导致冗长的代码,并使您的组件很难思考。
确保您熟悉更简单的替代方案:
- 如果您需要执行副作用(例如,数据获取或动画(以响应道具的更改,请改用
componentDidUpdate
生命周期- 如果您想仅在道具更改时重新计算某些数据,请改用内存化辅助对象
- 如果您想在道具更改时"重置"某些状态,请考虑使用键使组件完全受控或完全不受控