2017-06-15 65 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); 
});