Javascript 如果在react 16.3之后道具发生变化,那么触发重演的最佳方式是什么?

Javascript 如果在react 16.3之后道具发生变化,那么触发重演的最佳方式是什么?,javascript,reactjs,Javascript,Reactjs,我想在道具更改后触发一些redux操作,将一些状态存储到redux(缓存一些状态)中。随着react 16.3的发布,react中的许多生命周期功能都发生了变化。之前,我将其放入组件willreceivenextrops()。然而,似乎没有什么好办法可以做到这一点。目前,我做了如下工作: const MyComponent extends React.Component { static getDerivedStateFromProps(nextProps, prevState) {

我想在道具更改后触发一些redux操作,将一些状态存储到redux(缓存一些状态)中。随着react 16.3的发布,react中的许多生命周期功能都发生了变化。之前,我将其放入
组件willreceivenextrops()
。然而,似乎没有什么好办法可以做到这一点。目前,我做了如下工作:

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})
调用之前或之后直接执行此操作。

getSnapshotPreeUpdate
componentDidUpdate
之前如何?@riwu我已经尝试过了。但是,所有这两个钩子函数都将在状态更新后运行,因此prevState将丢失。另外,您是否正在尝试实现撤消?