如果在反应16.3后道具发生变化,触发redux动作的最佳方法是什么?

时间:2018-04-27 16:48:44

标签: javascript reactjs

我想在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()中发送操作的好方法,因为它会导致一些副作用。那么解决这个问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

您可以在getSnapshotBeforeUpdate

中执行此操作
getSnapshotBeforeUpdate(prevProps, prevState) {
  if (this.state.name !== prevState.name) {
    this.props.cacheState(prevState.someState) 
  }
}

或者,您可以在函数setState({ name: newName })调用之前或之后直接执行此操作。