2016-11-23 95 views
0

當我做這樣的事情修改的子組件狀態:react - 在Child上使用更新狀態時,爲什麼父組件狀態會更改?

// inside child component 
var stateToSet = this.state; 
stateToSet[active] = false; 
this.setState(nextState); 

雙親狀態更改而不重新描繪。

我想當父節點this.state被引用時stateToSet[active] = false,所以我Object.assign'd狀態和每個屬性我想修改,然後它的工作原理沒有修改父母的狀態。

我想現在爲什麼會發生這種情況。這可能是有意的行爲嗎?難道早午餐(我的編譯器)和連接文件成爲問題?

任何想法?

+0

你能發佈一些來自你的父母和孩子的相關代碼嗎?你是否觸發了從孩子到父母的任何回調函數?理想情況下,子組件的狀態更改不會影響父項。 –

回答

0

是的,你不應該直接修改狀態,因爲this.setState實際上會觸發組件的所有生命週期方法,並且修改狀態就像這裏不會。該功能需要您想要修改的密鑰,因此不需要Object.assign...

this.setState({ active: false }) 

我不知道你所說的父/子的意思了,爲什麼設置孩子的父母將有什麼做父母的,但如果你的意思是,父母是不是重新呈現在孩子的狀態的變化,那就是預期的行爲。

+0

我簡化了問題中的代碼,但現在看起來沒有幫助。我需要用'this.setState({filters [filterIndex] = updatedFilter}')這樣的方式來修改特定的數組項目(這不起作用,例如) – arteepa

+0

我沒有看到問題中的任何更改。你可能會發布更多的代碼?目前還不清楚你在問什麼,因爲大部分零件都沒有。 – ZekeDroid

相關問題