2016-07-13 62 views
0

我見過的人使用setState方式:在React中處理組件狀態的正確方法是什麼?

this.setState({enteredlocation: newLocation});

目前我正在寫的狀態是這樣的:

this.state.id.push({"no" : length , "location": this.state.enteredlocation});

什麼是更新狀態的正確方法?

我也打算在稍後整合Redux,但現在,我試圖部分理解部分。

+0

正確的方法是使用'this.setState'和** NEVER **直接改變'this.state'對象。順便說一句,我敢肯定'this.state.id.push()'不會觸發組件的重新渲染,所以它根本不明顯。 – zerkms

+0

是的,它使用'this.state.id.push()'時不會重新渲染,這讓我感到困惑。有沒有解釋呢?我想我會使用'this.setState' –

+1

「有解釋嗎?」 ---確定:反應並不知道你剛剛做出的改變。 – zerkms

回答

1

取而代之的是:

this.state.id.push({"no" : length , "location": this.state.enteredlocation}); 

...做的事:

this.setState({ 
    id: this.state.id.concat({ 
    "no": length, 
    "location": this.state.enteredlocation 
    }) 
}); 

這將確保id是一個新的數組引用,而不是與不同的內容相同的參考。

+0

我見過有人用Object.assign()來組合新對象。它使用'concat'時有什麼不同? –

+0

'concat'對於數組更簡單; Object.assign是更新對象的好方法。或者使用傳播(更簡單):'{... this.state.origObj,newProp:'value'}' – Jacob

相關問題