2017-05-04 85 views
1

例如,如果我有登錄縮減器和用戶圖標縮減器。當我登錄時,我想更新用戶圖標以及存儲用戶的信息。我卡在兩個選項之間:Redux減速器之間的共享動作與觸發多個動作

首先是導出USER_LOGIN操作並同時使用登錄縮減器和用戶圖標縮減器處理USER_LOGIN操作。

第二種方法是在動作和縮減器之間有一個1到1的映射(一種動作只屬於一個縮減器)。我們有登錄簡化器句柄USER_LOGIN,然後用Saga/Thunk我們向用戶圖標簡化器發送副作用UPDATE_USER_ICON。

哪一個更好?我個人喜歡第二種方法。

+1

讓我們不要忘記添加評論,同時降級任何答案。 – alpeshpandya

回答

1

引述Redux FAQ entry on dispatching multiple actions

有你如何組織自己的行爲沒有具體的規則。使用像Redux Thunk這樣的異步中間件當然可以實現諸如在一行中分派多個不同但相關的動作,分派動作以表示AJAX請求的進展,基於狀態有條件地分派動作,或者甚至分派動作並立即檢查更新的狀態之後。

一般來說,問這些行爲是相關但獨立的,還是實際上應該表示爲一個行爲。對自己的情況做些有意義的事情,但試着平衡減速器的可讀性和動作日誌的可讀性。例如,包含整個新狀態樹的操作將使您的reducer成爲一行,但缺點是您現在沒有關於變化發生的原因的歷史記錄,所以調試變得非常困難。另一方面,如果你在一個循環中發出動作以保持細化,這表明你可能想要引入一個以不同方式處理的新動作類型。

儘量避免在關注性能的地方連續調度多次。還有一些插件和方法可以批量發送。

1

我會說你的第一種方法更好,那就是我常用的方法。是的,當多個reducer採取相同的操作類型時,它可能會影響代碼的可讀性,但它有助於減少冗長的代碼(這是我對React生態系統的主要抱怨)以及一些性能。像登錄這樣的操作不會對性能產生巨大影響,但是當我在用戶操作上進行API調用時,我只是在多個Reducer中處理相同的操作類型。爲了便於閱讀,我添加了評論和文檔。

0

您確實需要在Redux中存儲用戶圖標嗎?在這種情況下更好的方法是有一個選擇器根據登錄用戶返回圖標。這樣你就可以保持商店中的最小數量的狀態。可以使用Reselect庫來緩存選擇器。

相關問題