ReactJS的setState混淆与select下拉

时间:2017-05-11 21:31:58

标签: jquery reactjs select setstate

我在React的setState中得到一个错误的响应,我正在使用选择下拉列表。它给了我之前选择的选项的价值。当我第一次选择它时它会显示为空白,但第二个选择将给我一个我之前选择的那个。

所以,首先选择:“绿色”结果为空 第二个选择:“红色”会给我'gre'作为结果

我知道我错过了什么,也许我没有正确绑定它?

func func1(){
  queue1.async(group: group){
    print("Some work in background queue 1")
  }
}

func  func2(){
  queue2.async(group: group){
    print("Some work in background queue 2")
  }
}


func func3(){
  group.notify(queue: queue3) {
    print("Some work in background queue 3")
  }
}


func doCompositeOperations() {
  func1()
  func2()
  DispatchQueue.main.async(group: group) {
    print("Reloading after all")
  }

  func3()
}

doCompositeOperations()

2 个答案:

答案 0 :(得分:1)

this.setState()异步更改状态。这意味着,该值将有点延迟真正改变。通常,当您在compomemnt更新后在state上转发时,这不是问题。但是你想要立即采取新的价值。这不起作用,因为此时您在state中仍然没有此值。在您的特定情况下,有两种方式。

第一种方式。在expressValue函数中使用原始值而不是状态值:

expressValue(e) {
   this.setState({
       typeValue : e.target.value
   });
   console.log('this type val state is: ' + e.target.value);
}

第二种方式。在更新组件后显示消息,例如,在render方法中,每次state更改时都会调用。

render() {
     console.log('this type val state is: ' + this.state.typeValue );
     return (
        <div>
            <TypeSelect changeHandler={this.expressValue} />
        </div>
     )
}

答案 1 :(得分:1)

罗马说得对,但我也想指出别的东西:

this.changeHandler未在主反应组件中定义。即使它是,你也没有把它绑定到(这)。

在构造函数中,更改行:

this.changeHandler = this.changeHandler;

为:

this.changeHandler = this.changeHandler.bind(this);

然后您将使用该名称定义一个函数,就像您执行expressValue()。