我想触发一些redux操作,以将一些状态存储到redux(缓存某些状态(之后。随着React 16.3的释放,反应中的许多生命周期功能已经改变。以前,我将其放入componentWillReceiveNextProps()
中。但是,似乎没有好方法可以做到这一点。目前,我做这样的事情:
const MyComponent extends React.Component {
static getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.name !== prevState.name) {
nextProps.cacheState(prevState.someState) // this function will dispatch a redux action
return {
someState: nextProps.someState // the someState will changed after this function
}
}
return {
...
}
}
}
似乎这不是在getDerivedStateFromProps()
中派遣动作的好方法,因为它会引起某种副作用。那么解决此问题的最佳实践是什么?
您可以在getSnapshotBeforeUpdate
:
getSnapshotBeforeUpdate(prevProps, prevState) {
if (this.state.name !== prevState.name) {
this.props.cacheState(prevState.someState)
}
}
另外,您可以在setState({ name: newName })
调用功能中直接执行此操作。