2017-06-15 83 views
1

我想设置在同一时间多个国家性质,但由于setState()异步我已经使用回调,但随着越来越多的属性我有一次这样的代码变得编辑更多&更难看!避免阵营的setState()回调循环

有没有其他的好办法来达到这个目的呢?

this.setState(
    { 
    item_1: true 
    }, 
    (e => { 
    this.setState(
     { 
     item_2: false 
     }, 
     (e => { 
     this.setState(
      { 
      item_3: 'Hello World' 
      } 
     ) 
     }) 
    ) 
    }) 
) 
+1

你为什么认为你可以一次只更新一个值? –

回答

6

它很可能将它们全部一气呵成,就像这样:

this.setState({ 
    item_1: true, 
    item_2: false, 
    item_3: 'Foo' 
}); 

如果你仍然想使状态变化后一定的变化,你仍然可以使用回调与此有关。像setState({obj},callback);

1

@HoriaComan答案是正确的,但提供更多的信息。

是的,是的setState异步但异步行为进场时,你的其他输入取决于先前的输出,

在你的情况下,所有的状态值是独立的。所以,你可以直接设置像

this.setState({ 
    item_1: true, 
    item_2: false, 
    item_3: 'Foo' 
}); 

你会想,当你想使用更新的状态下使用回调的情况下,国家只是将它设置为实例后

this.setState({ 
    item_1: true, 
    item_2: false, 
    item_3: 'Foo' 
},()=> { 
    console.log(this.state.item_1, this.state.item_2, this.state.item_3); 
});