setState之后的setState

时间:2019-02-21 13:33:39

标签: javascript reactjs state

我有以下代码,其中获得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

请告诉我,仅在将数据传输到trueupdate: false之后,才能将false传输到update吗?

我尝试使用回调,但是它不起作用。谢谢您的提示!

1 个答案:

答案 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})
            });
        })
    }  
}