我将 Redux 重构到我的代码中,但无法弄清楚如何获得以前的状态。
我的 componentDidUpdate 生命周期方法需要此状态,以便我可以调用其他方法而不会陷入无限循环。

// when component re-renders
componentDidUpdate(prevState) {
 // if the current page changes, or the search term changes.
 if(prevState.currentPage !== this.props.bucketlistState.currentPage ||
  prevState.searchTerm !== this.props.bucketlistState.searchTerm) {
  this.getBucketlists();
 }
}

最佳答案

prevStatecomponentDidUpdate 的第二个参数,第一个参数是 prevProps

// when component re-renders
componentDidUpdate(prevProps, prevState) {
 // if the current page changes, or the search term changes.
 if(prevState.currentPage !== this.props.bucketlistState.currentPage ||
  prevState.searchTerm !== this.props.bucketlistState.searchTerm) {
  this.getBucketlists();
 }
}

检查 documentation

语法:
componentDidUpdate(prevProps, prevState)

PS:它是一种反模式,可以直接从 props 派生出状态。您应该直接使用 props 并在 componentDidUpdate 中比较它们,例如
// when component re-renders
componentDidUpdate(prevProps, prevState) {
 // if the current page changes, or the search term changes.
 if(prevProps.bucketlistState.currentPage !== this.props.bucketlistState.currentPage ||
  prevProps.bucketlistState.searchTerm !== this.props.bucketlistState.searchTerm) {
  this.getBucketlists();
 }
}

并且由于您仅使用 props 进行比较,因此在 React 的 v16.3 之前更适合的地方是 componentWillReceiveProps 函数,但是该函数可能会在 future 的主要 React 版本中删除,预计你使用 componentDidUpdate 。欲了解更多信息,请检查

Can getDerivedStateFromProps be used as an alternative to componentWillReceiveProps
// when component re-renders
componentWillReceiveProps(nextProps, nextState) {
 // if the current page changes, or the search term changes.
 if(nextProps.bucketlistState.currentPage !== this.props.bucketlistState.currentPage ||
  nextProps.bucketlistState.searchTerm !== this.props.bucketlistState.searchTerm) {
  this.getBucketlists(nextProps);
 }
}

10-06 04:27