2017-05-05 63 views
0

當在組件層次結構中彼此距離很遠的兩個元素之間傳遞數據時,通過道具傳遞數據可能非常乏味。在這些用例中,我使用Redux僅僅是因爲它跟蹤大量組件時的情況。使用閉包來封裝React組件的狀態

我在一個小項目中所做的就是使用閉包來封裝狀態並導出該變量並在其他地方使用它。我覺得這是一個反模式,但它確實有效。

它的工作方式是聲明一些將在組件內被修改的變量。這個變量是從其他地方導入並從其他地方消耗的。

這裏是一個小樣本與我在做什麼(假裝有一個大的組件層次結構):https://codesandbox.io/s/2R9RvYkN1

所以我的問題是:有沒有更好的方法來達到同樣的效果?我們是否應該爲這些用例使用Flux實現?只是通過大量層次的組件傳遞道具是否可行?

+0

您應該在SO帖子中分享代碼模式並附上一個具體示例。 – vijayst

+0

如果您使用Redux,則不需要設置選定的顏色。 'ColorSelector'會派發一個動作來更新狀態,所選的顏色會自動更新而不需要用戶點擊一個按鈕。 – adrice727

回答

0

正如你自己所說的,通過提供一個對你的應用程序全局的「應用程序狀態」,允許你連接你想要的狀態的任何組件,

你的「封閉」僅僅是一個窮人的Redux,它也是一個全球性的國家,只是它缺少Redux提供的任何功能(除非你專門寫它們)。

讓我們CompA需要重新渲染基於CompB上的點擊事件,你如何自動做一個閉包?您必須添加偵聽器,檢查相關狀態是否已更改,然後再重新渲染。

所有這些事情都是由Redux免費完成的,所以我沒有看到任何額外的好處(除非不使用redux,這可能是它自己的好處)。

如果重要的是不使用redux,這可能是「很好」,但非常危險,我會說它不會很好地擴展。