我有以下代码,其中我获取了年
的当前状态,当您按下主组件中的按钮时,该状态会发生变化:
componentWillReceiveProps(nextProps){
this.setState({
update: true
});
if(nextProps.year===2019){
console.log('oneeeeeee',this.state.update)
this.setState({
dates: ['09.2018', '10.2018', '11.2018', '12.2018'],
numbers: ['3000', '4000', '3300', '2700'],
},() => {
this.setState({update: false})
});
}
}
问题是我使用的时间表捕获了菜单本身中的每个按钮单击,并在单击它时重新绘制时间表。
如果我删除 update
属性,一切正常。每次更改年份
时,我都会将更新
分配给true
,并向其传输新数据。之后,我想转移到 update: false
请告诉我,只有在将数据传输到 dates
和 numbers 后,如何才能将
?false
传输到 update
我尝试使用回调,但不起作用。感谢您的任何提示!
最佳答案
有一些事情需要纠正。
首先:首先,setState 是异步且批量的,因此为 update: true
调用 setState 并会立即更新状态
第二:在执行 componentWillReceiveProps 中的任何内容之前,您必须始终比较 current 和 nextProps
第三:componentWillReceiveProps
自 v16.3.0 起已弃用,因此我建议您使用 componentDidUpdate
代替
使用componentWillReceiveProps
的示例
componentWillReceiveProps(nextProps){
if (nextProps.year !== this.props.year && nextProps.year === 2019) {
this.setState({
update: true
}, () => {
this.setState({
dates: ['09.2018', '10.2018', '11.2018', '12.2018'],
numbers: ['3000', '4000', '3300', '2700'],
},() => {
this.setState({update: false})
});
})
}
}
关于javascript - 设置状态后设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54808352/