Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs,我需要了解一下this.setState和prevState_Reactjs - Fatal编程技术网

Reactjs,我需要了解一下this.setState和prevState

Reactjs,我需要了解一下this.setState和prevState,reactjs,Reactjs,据我所知,当父组件更新组件的属性时,就会调用这个生命周期挂钩 这段代码检查requestRefresh属性是否不同(一个要更新,另一个当前有) 现在我不明白的是这个,这个.updateData) 为什么使用setState方法会出现这种情况。请帮我理解 其次,prevState从何而来,哪个生命周期钩子可以更新它React维护人员不鼓励使用componenetWillReceiveProps 从React文档: 建议您使用静态getDerivedStateFromProps生命周期,而不是不安全

据我所知,当父组件更新组件的属性时,就会调用这个生命周期挂钩

这段代码检查requestRefresh属性是否不同(一个要更新,另一个当前有)

现在我不明白的是这个
,这个.updateData)

为什么使用setState方法会出现这种情况。请帮我理解


其次,prevState从何而来,哪个生命周期钩子可以更新它

React维护人员不鼓励使用componenetWillReceiveProps

从React文档:

建议您使用静态getDerivedStateFromProps生命周期,而不是不安全的组件WillReceiveProps。了解有关此建议的更多信息

回答您的问题:prevstate是以前的状态,因此它是组件在收到新道具之前的状态,而新道具可能会改变新状态。您还可以在静态getDerivedStateFromProps方法中删除prevstate:

componentWillReceiveProps(nextProps) {
    // Check to see if the requestRefresh prop has changed
    if (nextProps.requestRefresh !== this.props.requestRefresh) {
        this.setState({loading: true}, this.updateData);
    }
}
getDerivedStateFromProps在实例化组件后以及在组件接收新的props时调用。它应该返回一个对象以更新状态,或者返回null以指示新的道具不需要任何状态更新


setState方法可以使用回调作为其第二个参数进行调用,主要用于处理状态完全更新时需要执行的操作

在您的示例中,
这个.updateData
是回调

setState的第一个参数也是一个函数,带有签名
(prevState,props)=>stateChange
,这允许您在执行更新时访问以前的状态

您可能需要查看官方文件以了解更多详细信息:

你读过吗?它解释了第二个参数的作用(即在状态更新后调用函数)。此外,通常不赞成在一篇帖子中问多个问题,因为这会让你不太清楚你在问什么/如何回答。我建议你把文章的篇幅缩小到一个问题:)我看到这个reactjs表,它有使用prevState的组件。this.updateData是setState的回调函数,请检查这个,其次,componentDidUpdate生命周期函数公开prevState,以及getDerivedStateFromProps。setState还有一个更新程序函数语法。有关此类问题,请参阅文档。我们可以不直接更改子组件中父组件的状态,但您可以从子组件触发一个事件,该事件将执行父组件的一个函数,并更新此函数中的状态。您可以查看此问题中给出的示例:
static getDerivedStateFromProps(nextProps, prevState)