2016-03-15 37 views
2

我正在重構我的應用程序以使用redux,這很好。如何在多個redux減速器中同時觸發單個初始動作?

我想要做的一件事就是在開始時分派一個初始動作,每個reducer都會設法在那個時候初始化自己。

比方說,我有創造的店,路線等在該文件中的main.js,我可以這樣做:

store.dispatch({ type: 'app/init' }); 

如果我這樣做,動作類型app/init可以在每個減速攔截需要自行初始化。

一個例子用例(其中包括)

當應用程序啓動時,第三方庫一定要來看望如果用戶當前被驗證。如果是這樣,則必須使用該用戶數據觸發LOGIN_SUCCESS操作。

我想看到這個代碼與身份驗證縮減器在同一個文件中,由全局init動作(這意味着商店被創建)觸發。

問題

在減速(其中初始化動作管理),其他動作不能出動。

實施操作的建議方式是定義動作創建者,這確實很乾淨,並讓我們使用中間件thunks來發送其他動作。

我可以用init()行動的創作者爲每個減速器(我定義在同一個「鴨」相關的行動和減速器文件),但是這意味着進口/調用他們每個人在main.js,這正是我試圖避免直接調度行動。

如何通過一個app/init動作派出並能夠在每個存儲中攔截它併發送其他操作來獲得最好的世界?

注:我只是在每個reducer中實現這些初始化代碼,內聯,但我沒有這樣的標準訪問調度器?

+0

您是否試圖在開始階段填充狀態? –

+0

每個減速器中已經定義了初始狀態。然後,根據該初始狀態,需要發送其他操作。有點像一個初始thunk ...我想在所有需要它的減速器攔截的單個發送中分組。 – Pandaiolo

+0

'createStore'將'initialState'作爲一個可選參數。如果你只是想設置整個應用程序的初始狀態,這是值得檢查。這比被激發的一組初始動作更可取。 –

回答

1

減速器根據動作計算下一個狀態。在Redux中,它不適合放置像調用API那樣的副作用。

如果你想編排一個異步的操作流程,我建議你看看Redux Saga。它可以讓你定義可以「等待」特定動作,執行一些副作用並分派更多動作的長時間運行的功能(「sagas」)。

相關問題