componentWillReceiveProps(nextProps) {
// Check to see if the requestRefresh prop has changed
if (nextProps.requestRefresh !== this.props.requestRefresh) {
this.setState({loading: true}, this.updateData);
}
}
据我所知,当父级更新Component的属性时,会调用此生命周期钩子。
这段代码检查requestRefresh属性是否不同(一个要更新,一个是当前有)
现在我不明白的是, this.updateData);
为什么这是使用setState方法。请帮我理解
其次prevState来自哪里以及哪个生命周期钩子可以更新它
答案 0 :(得分:4)
可以使用回调作为第二个参数调用setState方法,主要用于处理状态完全更新时需要完成的操作。
在您的示例中,this.updateData
是回调。
setState的第一个参数也是一个带有签名(prevState, props) => stateChange
的函数,这允许您在执行更新时访问以前的状态。
您可以查看官方文档以获取更多详细信息: https://reactjs.org/docs/react-component.html#setstate
答案 1 :(得分:1)
React维护者不鼓励使用componentsnetWillReceiveProps。
来自React docs:
建议您使用静态getDerivedStateFromProps生命周期而不是UNSAFE_componentWillReceiveProps。详细了解此推荐here。
回答你的问题:prevstate是以前的状态,所以在收到新的道具之前它是你的组件的状态,这反过来可能会使新状态变为现实。您还可以在静态getDerivedStateFromProps方法中使用prevbate:
static getDerivedStateFromProps(nextProps, prevState)
getDerivedStateFromProps在实例化组件之后以及接收新的props时调用。它应该返回一个更新状态的对象,或者返回null以指示新的props不需要任何状态更新。