react中的 componentDidUpdate 与 componentWillReceiveProps 用例

IT技术 javascript reactjs
2021-04-20 00:41:49

这就是我们如何使用 componentWillReceiveProps

componentWillReceiveProps(nextProps) {
  if(nextProps.myProp !== this.props.myProps) {
    // nextProps.myProp has a different value than our current prop
  }
}

它非常类似于 componentDidUpdate

componentDidUpdate(prevProps) {
  if(prevProps.myProps !== this.props.myProp) {
    // this.props.myProp has a different value
    // ...
  }
}

我可以看到一些差异,比如如果我在 componentDidUpdate 中执行 setState,render 将触发两次,并且 componentWillReceiveProps 的参数是 nextProps,而参数componentDidUpdate是 prevProp,但严重的是我不知道何时使用它们。我经常使用componentDidUpdate,但使用 prevState,比如更改下拉状态并调用 api

例如。

componentDidUpdate(prevProps, prevState) {
      if(prevState.seleted !== this.state.seleted) {
        this.setState({ selected: something}, ()=> callAPI())
      }
    }
1个回答

两者的主要区别在于:

  • 当它们在组件的生命周期中被调用时
  • 它如何更新组件 state

他们什么时候叫?

顾名思义——正如你可能知道的,因为你提到“如果我在 componentDidUpdate 中设置了 setState,渲染将触发两次”——在组件更新(接收到新的props或状态)之后componentDidUpdate被调用这就是为什么这个函数的参数是and 的原因prevPropsprevState

所以如果你想在组件收到新的 props之前做一些事情,你会使用componentWillReceiveProps,如果你想收到新的 props 或 state之后做一些事情,你会使用componentDidUpdate.

他们如何更新state

这里的主要区别是:

  • componentWillReceiveProps同步更新状态
  • componentDidUpdate异步更新状态

这很重要,因为在尝试将状态与组件 props 的其他部分同步时,可能会出现一些问题。

在组件更新之前做事的一些例子是什么,而在组件更新后无法完成?
2021-06-06 00:41:49