componentDidUpdate vs componentWillReceiveProps用例在react中

时间:2018-03-20 14:01:45

标签: javascript reactjs

这就是我们使用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 个答案:

答案 0 :(得分:20)

两者之间的主要区别是:

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

什么时候叫他们?

顾名思义,您可能已经知道,因为您提到“如果我在componentDidUpdate中执行setState,则渲染将触发两次” – componentDidUpdate在组件更新之后称为 新道具或状态)。这就是为什么此函数的参数为​​prevPropsprevState的原因。

因此,如果您想在组件收到新道具之前做某事,则可以使用componentWillReceiveProps,如果您想在之后做某事收到新的道具或状态,则可以使用componentDidUpdate

他们如何更新state

这里的主要区别是:

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