在我的React應用程序中,我需要存儲一些需要在任何地方都可訪問的數據,但不希望將其保存在全局(即靜態)數據結構中,以便模擬我的單元測試和風格指南。如何避免React應用程序中的全局狀態?
我的意思的數據是例如:
- 恆定
IN_BROWSER
即在瀏覽器true
構建和在節點false
。 - 是在瀏覽器上的啓動初始化恆定
IS_MOBILE
誰是當前登錄的用戶的 - 數據,
- 網址,我連接到API(這是本地主機,中間服務器或生產,取決於配置)
現在我有一個名爲sessionData.js
存儲此數據文件,每當我需要的,我在我的代碼做require('./sessionData')
並使用它。我可以使用rewire
爲我的單元測試嘲笑它,並且,當它們按順序運行時,它現在可以正常工作。這對於styleguide是有問題的,因爲每個例子都可以從不同用戶的角度展示視圖(理想情況下,每個例子都有自己的sessionData
)。
IN_BROWSER
目前是global
,這也是一個壞主意,因爲它會對來自每個模塊的初始化代碼隱式依賴。
我發現我可以通過道具將我的sessionData
和其他東西傳遞給層次結構中的每個組件,但這看起來像是很多冗餘。
有什麼設計模式可以更好地解決它嗎?
這一個是好的,但它有助於只針對第一種情況下,該'IN_BROWSER'不變。 – mik01aj
@ m01我以爲你可以在指向你的'sessionData.js'模塊的插件中添加另一個參數,這樣你就可以不需要每次都使用它。但是你將不得不返回一個函數而不是一個構造對象。不知道它是否合適。 – Tulio
sessionData的問題是我不希望它是全局的。我想爲每個單元測試或每個styleguide示例動態更改它。 – mik01aj