2016-09-10 77 views
0

所以我使用的反應,我正在我的項目中使用不可變數據與Facebook的immutable.js庫的方法。React + Immutable - 實現shouldComponentUpdate與淺等於

我知道React比其他庫更快,因爲它只更新neccesarry DOM,我知道它在更新之前執行了一個協調過程,並且在創建虛擬DOM並對其進行比較的過程中,但我從未真正知道它如何知道要更新什麼。 所以我做了一些研究和它的真實情況,反應的調和算法真的很棒,並節省了時間,但是隨後某些東西打到了我,shouldComponentUpdate方法在哪裏進入? 因此,爲每個組件調用shouldComponentUpdate,如果它返回true,那麼react會執行協調過程,其中包括創建虛擬dom並對它們進行比較。 那麼爲什麼我們不應該爲每個組件實施SCU方法呢?好的反應也給了你一個答案,包括比較可變對象,並且在這種情況下的平等應該是一個很深的答案,並且這會花很長時間,所以你可能不會實現它。

這裏是我問我的問題的部分,如果我的項目中的所有數據實際上是不可變的,爲什麼我不應該在所有組件上使用簡單的淺平等來實現SCU?這樣我們就可以節省調和過程,而且我們的應用會更快。

回答

1

據我所知,如果你有SCU方法,如果它返回true,React創建虛擬DOM並將其與現有的DOM進行比較。如果它們相同,則沒有任何反應,但是,創建虛擬DOM的成本仍然存在。另一方面,如果SCU方法返回false,則會跳過組件和子組件並保持相同(不會創建虛擬DOM)。

像以下示例代碼實現SCU組分是如果所有的道具下values密鑰聚集爲不可改變並且在該組件沒有狀態的最有效方式,

shouldComponentUpdate(nextProps) { 
    return !Immutable.is(this.props.values, nextProps.values) 
}