我在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()
答案 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()。