我的一个React组件接收一个JSON数组。该组件包含componentDidUpdate。我知道这个函数在渲染之前运行,我可以看到nextProps和nextState,所以我可以将它们与当前进行比较。然而内心的工作使我感到困惑
以下是我的计划的步骤:
此组件运行componentDidUpdate:
differenceList
)此组件根据differenceList
以下是我放置的console.log。
//触发列表更新后
self.setState({differenceList: self.state.differenceList.concat(item.id)});
为什么#4
显示空?
在#6
为什么再次进入componentWillUpdate?是因为我更新了componentWillUpdate中的状态?但如果是这样,为什么#5
显示空状态#8
现在再次输入渲染功能后,它会突然显示已更改的状态
答案 0 :(得分:2)
答案是因为setState
是异步的。
<Parent/>
尝试渲染<Child list={[1, 2, 1336]}/>
(批处理0)
willUpdate()
nextProps = {list: [1, 2, 1336]}
self.setState({differenceList: self.state.differenceList.concat(['1336'])}) // This code is asynchronous, creating Batch 1
willUpdate()
的结尾,this.state仍然是相同的render()
setState()
来电)
willUpdate()
与nextState = { ... differenceList: ['1336'] }
this.state
仍未更新willUpdate()
render()
新状态我不确定我是否很清楚,我有点累
无论如何,you should not be using this.setState
in componentWillUpdate()
.
尝试将componentWillReceiveProps()
用于您的目的。