2016-12-15 83 views
0

因此,在簡單的反應中,setState會觸發render方法。現在,關於Redux,讓我們說我發起了一個動作,從reducer返回的狀態是全新的,所以它聽起來像每個組件都應該更新,但我知道這不是真的,因爲當我調試我的應用程序時,我可以看到它,再加上它聽起來像可怕的表現。所以我的問題是,redux是否會在每個組件中查看它需要的狀態片?在mapStateToProps?一般Redux如何決定何時調用渲染方法?Redux中的組件更新

我知道終極版中有優化...謝謝...

+0

「全新」並不意味着完整的深層複製。除非你正在改變狀態樹的每個節點。 –

回答

1

一個終極版商店提供subscribe()方法。當您使用connect()時,它會生成包裝組件,這些組件在創建時會自動訂閱商店。每個連接的組件都是獨立的用戶。

當調度操作時,商店運行所有訂閱回調。包裝組件然後調用store.getState()。作爲第一次檢查,如果根狀態對象是===與前一個相同,則該組件將在此停止。 (這是減速機狀態直接變化不好的原因之一)

下一步是調用提供的mapState函數並傳入當前狀態對象。包裝器組件然後使用淺的相等比較檢查比較從mapState返回的對象的內容與返回的對象的最後時間的內容。如果任何內容已根據淺表檢查更改,則該組件知道需要使用新數據重新呈現「真實」組件。 (再次,「淺」檢查是突變不好的另一個原因。)

+0

很好的答案,你可能想指出'redux'和'react-redux'是2個獨立的模塊。 :) –