这就是我们使用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())
}
}
答案 0 :(得分:20)
两者之间的主要区别是:
state
顾名思义,您可能已经知道,因为您提到“如果我在componentDidUpdate中执行setState,则渲染将触发两次” – componentDidUpdate
在组件更新之后称为 新道具或状态)。这就是为什么此函数的参数为prevProps
和prevState
的原因。
因此,如果您想在组件收到新道具之前做某事,则可以使用componentWillReceiveProps
,如果您想在之后做某事收到新的道具或状态,则可以使用componentDidUpdate
。
state
?这里的主要区别是:
componentWillReceiveProps
将更新状态synchronously componentDidUpdate
将更新状态asynchronously。这很重要,因为在尝试与组件的props的其他部分同步状态时,可能会出现一些问题。