2016-09-26 63 views
0

React Virtual DOM如何區分舊內存DOM和新內存DOM?具體來說,我是否設置了改變的狀態並且設置了改變的狀態和未改變的狀態之間有什麼區別?設置Object和Number有什麼區別嗎?當我設置更改的狀態和未更改的狀態時,React虛擬DOM如何工作?

例如: 當前狀態是{name: 'Eric', id: '1234567890', others: {other1: 1, other2: 2}}。差異結果this.setState({name: 'Tiger'})與差異結果this.setState({name: 'Tiger', id: '1234567890', others: {other1: 1, other2: 2}})相同嗎?

+0

可能的重複[爲什麼React的虛擬DOM的概念被認爲比髒模型檢查更高性能?](http://stackoverflow.com/questions/21109361/why-is-reacts-concept-of-virtual- dom-said-to-more-performant-than-dirty-mode) – alexi2

+0

我不認爲它是這個問題的重複。我的核心問題是,我是否設置了更改的狀態並設置了更改的狀態和未更改的狀態之間是否有區別? – user3300252

+0

沒有 - 反應將傳遞的狀態對象合併到現有狀態對象中。它不會區分狀態,它會區分從狀態生成的虛擬命令。 – zerkms

回答

0

默認情況下做出反應觸發到setState所有呼叫重新繪製的數據是否有變化(見setStatedocs),所以我希望它在你描述的情況相同。

如果您需要特定的行爲,您可以使用shouldComponentUpdate覆蓋它的行爲方式。

這對於它使用的內部差異的實際內容意味着什麼是另一個故事 - 我期望它們是相同的,但依靠任何這種行爲的具體細節感覺是一個壞主意。

+0

「這對於它使用的內部差異的實際內容意味着什麼是另一回事」---「內部差異」適用於虛擬DOM,而不是狀態對象。 – zerkms

+0

@zerkms意識到這一點,我懷疑這將是一個危險的遊戲,假設任何具體的實現細節如何超過setState API生成vDOM。 – jaylynch

+0

不需要假設:虛擬dom是從您從render()返回的組件生成的。 – zerkms