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

ReactJS this.setState()与this.state.myvar不同步

祁奇略
2023-03-14
问题内容

在组件中的此ReactJS代码中,我希望this.setState( {b_MyPartyCat: value} )进行更新,this.state.b_MyPartyCat以便两个console.log语句updatePartyCategory()显示相同的值,但它们却不相同。

var MyIconButton = React.createClass({

  handleSubmit: function(e) {
    e.preventDefault();

    var b_buttonOn = false;
    if (this.props.pressed === true) {
      b_buttonOn = false;
    }
    else {
      b_buttonOn = true;
    }
    this.props.updateFilter( b_buttonOn ); 
  },

  render: function() {   
    return (
      <div>
        <form onSubmit={this.handleSubmit}>
          <input type="image" src={this.props.pressed ? this.props.onpic : this.props.offpic }></input>
        </form>
      </div>
    );
  }
});


var MyPartyCatButton = React.createClass({

  render: function() {
    return (
      <MyIconButton pressed={this.props.pressed} updateFilter={this.props.updateFilter} onpic="static/images/icon1.jpeg" offpic="static/images/off-icon.jpg"/>
    );
  }
});

//
// Main App view
var MyHomeView = React.createClass({
  getInitialState: function() {
    // This is where I'll eventually get data from the server.
    return {
      b_MyPartyCat: true
    };
  },

  updatePartyCategory: function(value) {
    // Eventually will write value to the server.
    this.setState( {b_MyPartyCat: value} );

    console.log("INSIDE: MyHomeView() updatePartyCategory() value = " + value );
    console.log("INSIDE: MyHomeView() updatePartyCategory() this.state.b_MyPartyCat = " + this.state.b_MyPartyCat );

  },

  render: function() {
    return (
        <div>
         <MyPartyCatButton pressed={this.state.b_MyPartyCat} updateFilter={this.updatePartyCategory}/>
        </div>

        // Eventually will have 3 other categories i.e. Books, Skateboards, Trees !
    );
  }
});

问题答案:

setState实际上排队状态更新。如果要在实际执行后做某事,可以将回调作为第二个参数传递。

updatePartyCategory: function(value) {
    this.setState({b_MyPartyCat: value}, function(){
        console.log(this.state.value === value); // true
    }.bind(this));
},


 类似资料:
  • 有没有人知道Java10和JVM10规范的版本与以前的版本不同?对于Java8和Java9,有不同的规范,很难看到有什么变化。

  • 通常,80386会正确的执行ROM中为8086,8088,80186和80188设计的软件。下面是一些8086和80386在执行过程中的一些细微区别。 1.指令时钟计数。 大部分指令的执行过程,80386花费的时钟要比8086/8088要少。 这主要影响到一下几个方面: I/O操作要求的延时。 操作并口连接的80387过程中设定的延时。 2.DIV指令的除法异常触发点。 80386的除法异常总是将

  • 问题内容: 当查询中没有汇总时,为什么有人使用分组依据而不是分组? 另外,有人知道分组依据与MySQL和SQL Server中不同的性能注意事项。我猜想SQL Server有一个更好的优化器,并且那里的性能可能接近同等水平,但是在MySQL中,我希望显着的性能优势能够与众不同。 我对dba答案感兴趣。 编辑: Bill的帖子很有趣,但不适用。让我更具体一点… 与 问题答案: 来自MS SQL Se

  • 问题内容: 我正在为android构建一个应用程序,并使用libGdx,我检查了一百万个有关如何添加Admob的教程,每个教程都要求调整build.gradle文件,但我的文件与他们的文件不一样,它们之间存在依赖关系和不同的内容,任何想法如何在我的build.gradle上添加admob? android build.gradle: 和核心build.gradle: 最后是桌面build.grad

  • 问题内容: 我只知道一个js库,那就是jQuery。 但是我小组中的其他编码人员正在将AngularJS更改为新项目中的默认库。 我对此一无所知。与jQuery有何不同? 我已经为jQuery中的类似任务完​​成了一组功能。我还能在AngularJS中使用jQuery吗? 问题答案: Angular 1是一个框架,而Angular 2是一个 平台 。(参考) 对于开发人员,Angular2提供了一

  • 我正在阅读GRPC的解释,这张图很有趣: 传输层是如何工作的?如果是通过网络...为什么叫RPC?更重要的是,这与为服务层实现API的REST(客户机中具有发出http请求的方法的类)有何不同?