2017-03-01 41 views
2

例如,我有部件的這樣的結構:連接到終極版什麼時候應該連接組件以減少反應?

<Parent> 
     <Child_1> 
      <InnerChild_1 /> 
     </Chidl_1> 
     <Child_2> 
      <InnerChild_2 /> 
     </Chidl_2> 
</Parent> 

元器件<Parent>。有什麼更好的方式來更新<InnerChild_1 />與應用程序狀態,從<Parent>發送此數據與props或連接<InnerChild_1 />以減少?如果連接,我應該連接我的所有組件,這是使用狀態,以減少?

回答

0

您可以使用擴展運算符(...道具)或上下文。

通過傳播應該是這樣的:

<InnerChild_1 
    {...this.props} 
/> 
+0

這是發送道具的另一種方式。我想知道,有什麼更好的,發送道具或連接到REDX。 – Andrew

+1

最好的做法是保持儘可能多的頂部組件,併發送道具。 https://github.com/reactjs/redux/blob/master/docs/faq/OrganizingState.md – daniloprates

1

恕我直言,更好的使用connectContainers而不是Components

Container包含組件。所以connectredux狀態到Container,然後將狀態發送到Components作爲props

在你的情況下,你可以假設<Parent />Container和其他孩子作爲組件。

+0

如果我有很多嵌套,並需要重新渲染最後的組件,並且如果我從容器中發送道具所有我的組件「在途中」都將被重新渲染。這是正常的嗎? – Andrew

+0

這方面的性能損失非常小。爲了降低整體應用程序的複雜性,這是公平的權衡。是的,樹上的組件會被重新渲染,但由於這些樹上不會有很多DOM突變,所以它們無關緊要。如果你真的需要停止在樹中途重新渲染,你總是可以到達'shouldComponentUpdate'。 – natnai

3

根據我的經驗,您應該儘可能在應用程序中儘可能少地使用redux。作爲一個經驗法則,總是選擇在組件鏈中傳遞道具,而不是在子組件中分派動作。對我來說,當你需要在多個容器組件之間共享狀態時,redux真正發光。典型的用例是電子商務應用中的認證/用戶數據。在你的情況下,我可以放心地說connect你的孩子組件只會導致不必要的間接性。

+1

100%同意;閱讀「聰明」與「愚蠢」的組件;這裏有一個(很多)帖子:https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0#.ib885dqmd –

3

儘管所有其他答案都表明您應該頂級,但這確實是一個只適用於非常簡單的應用程序的舊建議。

使用connect無論您需要保持組件與Redux存儲庫同步。在你的例子中,如果<Parent />沒有使用任何狀態,它的角色僅僅是組合性的,我不會連接那個狀態。我會保留父標準React組件,並單獨連接子項目。

對於具有嵌套實體的大型列表或複雜數據結構,這就是要走的路。

如果您選擇其他方式並連接到最上面的組件,那麼任何狀態更改都會導致組件樹完全重新呈現,而不會自動優化。由於connect ed組件將爲您執行shouldComponentUpdate,因此通常會將多個項目連接到商店,而不是連接「列表」父項並在每次更改時重新呈現每個項目,從而獲得更好的性能。

見陣營 - 終極版FAQ的終極版文檔: http://redux.js.org/docs/faq/ReactRedux.html#react-multiple-components

具體做法是:

早期終極版文檔,建議你應該只有靠近你的組件樹頂部的幾個 連接組件。但是,時間和經驗表明,這通常需要幾個組件來了解所有後代的數據需求,並迫使他們傳遞混亂的道具數量。

+0

我不能同意這一點。如果您深入瞭解React dom渲染器的源代碼,您會發現,對於不改變道具的DOM元素進行差異化所帶來的性能損失是最小的。 sCU在錯誤的手中是危險的,而且由於難以確定它被稱爲樹的哪個位置,因此我的經驗中出現了許多神祕的錯誤。 – natnai

+1

我一直在使用react-redux大約2年。我一直在使用智能vs轉儲組件方法,其中只有「智能」容器組件將連接到存儲更改並將狀態傳遞爲屬性。我的結論是,這種模式在幾個方面已經過時並且有害:1.它在組件樹中引入了沉重的嵌套組件依賴關係2.它通過確定整個樹來重新呈現狀態變化來影響性能3.當代碼變成意大利麪時傳遞樹鏈中許多中間組件不需要的屬性。 –

相關問題