当前位置: 首页 > 面试题库 >

将值分配给组件状态后,为什么console.log会打印以前的状态?

阎伟志
2023-03-14
问题内容

我正在将数字值从Numbers组件发送到Main组件。一切正常,直到我在Main组件中将该值设置为该组件的状态。

var Numbers = React.createClass({
    handleClick: function(number){
        this.props.num(number)
    },
    render: function(){
        return (
            <div>
                <button onClick={this.handleClick.bind(null, 1)}>1</button>
                <button onClick={this.handleClick.bind(null, 2)}>2</button>
                <button onClick={this.handleClick.bind(null, 3)}>3</button>
            </div>
        )
    }
})

var Main = React.createClass({
    getInitialState: function(){
        return {
            number: 0
        }
    },
    handleCallback: function(num){
        console.log("number is right here: " + num);
        this.setState({
            number: num
        })
        console.log("but wrong here (previous number): " + this.state.number)
    },
    render: function() {
        return (
            <Numbers num={this.handleCallback} />
            //<SomeComponent number={this.state.number} />
        )
    }
});

React.render(<Main />, document.getElementById('container'));

为什么会这样?其次console.loghandleCallback功能打印之前的数量,而不是它的数量num参数。我需要正确的号码以保持状态,因为我将立即将其作为道具发送给我SomeComponent

https://jsfiddle.net/69z2wepo/13000/


问题答案:

从文档:

setState()不会立即更改this.state,但会创建一个挂起的状态转换。调用此方法后访问this.state可能会返回现有值。无法保证对setState的调用的同步操作,并且可能会为提高性能而批量调用。

如果您要在调用后打印更改setState,请使用可选的回调参数:

this.setState({
    number: num
}, function () {
    console.log(this.state.number);
});


 类似资料:
  • 问题内容: 要实现如下状态栏: 我希望将此打印到stdout,并保持刷新状态,而不是打印到另一行。这该怎么做? 问题答案: 有一个Python模块,你可以从PyPI将其称为实现这样的功能。如果您不介意添加依赖项,那么这是一个很好的解决方案。否则,请选择其他答案之一。 一个简单的用法示例: 要安装它,可以使用,或者如果您更喜欢pip。

  • 我是JavaEE的新手,我试图找出无状态和有状态会话bean之间的区别。到目前为止我所理解的: 1.)在有状态会话bean中,bean的状态与客户机绑定;因此,只要我们与同一个用户在同一个会话中,就应该有相同的bean实例状态 2.)在无状态会话bean中,没有绑定到会话和客户机的状态;事实上,bean实例可以在用户的每次调用或请求中进行交换 为了尝试这一点,我编写了一个简短的servlet,它只

  • 这两个是等价的吗?如果不是,哪一个是最好的,为什么?

  • 1)对于上面的代码,如果LogSearchRemote实现bean是有状态的,那么 没有错误,但是如果LogSearchRemote实现bean是无状态的,那么会抛出异常“$Proxy53不能强制转换为hk.gov.ehr.service.tch.als.admin.logsearch.ejb.LogSearchRemote”,为什么? 2)对于有状态会话bean,每次 返回不同的logSearc

  • 问题内容: 我想要使用在Python中使用函数返回值将值分配给shell变量的解决方案的PHP等效方案 在我的php文件中,我读取了一些常量值,例如: 到目前为止,在我的shell脚本中,我有以下代码:- 我能够通过外壳正确执行文件。 要进一步了解我要执行的操作,请检查从PHP文件读取配置设置并使用Shell脚本上传整个项目代码的最干净方法 更新 更正为 解 正如Fritschy回答的那样,它可以

  • 在我的React JS项目中,我正在处理。我已经通过了使用进行私有路由和身份验证的示例。 https://reacttraining.com/react-router/web/example/auth-workflow 根据这个留档,他们创建了一个作为无状态组件。 但我的要求是将其转换为有状态的React组件,因为我想将我的组件连接到redux存储。 这是我的代码。 无状态组件 我将这个组件转换成