2017-05-29 81 views
0

在終極版的文檔:REDUX體內注射進入狀態組件,重新渲染

https://github.com/reactjs/react-redux/blob/master/docs/api.md#inject-dispatch-and-every-field-in-the-global-state

它說注射的完整狀態進入連接組件,這殺死性能,因爲組件將重新渲染每一個動作。

現在我想知道,爲什麼是這樣。不會默認嚴格等於areStatesEqual函數,並且默認淺等於areStatePropsEqual函數至少可以捕獲這種情況,哪裏的狀態沒有改變?或者是文件假設,國家可能在每一個行動上都會發生變化?

回答

0

each only listen to a relevant slice of the state

這正是你想要的。您不希望將完整狀態注入到每個組件中,因爲每當某個狀態發生更改時,每個組件都會重新呈現事件,而該狀態與大多數組件無關。你不希望組件聽到與它們無關的狀態,因爲那樣它們將執行無用的重新呈現,這對性能不利。

在大多數情況下,當一個動作被觸發時,至少某些狀態將會改變,因爲這是整個動作點。觸發狀態更新。

+0

好吧,要清楚,我的組件不會重新渲染,如果狀態不會更改,那麼正確? – ghost23

+0

@ ghost23是的,如果一個動作被觸發,但它不會導致注入組件的狀態發生變化,組件將不會重新渲染。這假定你的應用程序被正確寫入,並且你不在render()函數等中創建新實例。本文相當有用:https://medium.com/@esamatti/react-js-pure-render-performance-anti-pattern-fb88c101332f – sheunis