javascript - 设置状态后设置状态

标签 javascript reactjs state

我有以下代码,其中我获取了的当前状态,当您按下主组件中的按钮时,该状态会发生变化:

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

请告诉我,只有在将数据传输到 datesnumbers 后,如何才能将 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/

相关文章:

javascript - PHP 没有从 $.ajax 获取 POST 数据

javascript - 显示覆盖全屏 div,然后通过单击将其隐藏

javascript - 'class' 语法在 javascript 中如何工作?

css - 我如何使用 window.scrollby 进行 react ?

javascript - 如何管理应用程序和 URL 中的状态?

c++ - 如何保存 std::mersenne_twister_engine 的状态以便稍后恢复?

javascript - Raphael 中的文档流程图

reactjs - react native Android 应用程序 react native Web 应用程序

javascript - Chrome 扩展程序 : Remembering a checkbox value when popup is reopened

javascript - 如何在 Javascript 中使用 .insertAdjacentHTML 设计带有 "span"的文本?