如果道具在React 16.3之后更改,则触发REDUX动作的最佳方法是什么



我想触发一些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 })调用功能中直接执行此操作。

最新更新