我有以下代码,其中获得jdbc:awsathena://athena.[my-region].amazonaws.com:443
的当前状态,当您按主要组件中的按钮时,状态会发生变化:
S3OutputLocation
问题是我使用的计划表会捕获菜单本身中的每个按钮单击,并在单击时重新绘制计划表。
如果我删除year
属性,则一切正常。每次更改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
分配给year
,并将新数据传输到其中。之后,我想转移到update
请告诉我,仅在将数据传输到true
和update: false
之后,才能将false
传输到update
吗?
我尝试使用回调,但是它不起作用。谢谢您的提示!
答案 0 :(得分:3)
您需要纠正一些事情。
首先:首先,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})
});
})
}
}