我想在props改变之后触发一些redux动作将一些状态存储到redux(缓存某些状态)。随着16.3反应的发布,React中的许多生命周期功能都发生了变化。以前,我把它放到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()
中发送操作的好方法,因为它会导致一些副作用。那么解决这个问题的最佳做法是什么?
答案 0 :(得分:0)
您可以在getSnapshotBeforeUpdate
:
getSnapshotBeforeUpdate(prevProps, prevState) {
if (this.state.name !== prevState.name) {
this.props.cacheState(prevState.someState)
}
}
或者,您可以在函数setState({ name: newName })
调用之前或之后直接执行此操作。