Reactjs,我需要对this.setState和prevState有所了解

时间:2018-04-30 09:35:09

标签: reactjs

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来自哪里以及哪个生命周期钩子可以更新它

2 个答案:

答案 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不需要任何状态更新。