2016-03-07 24 views
3

我正在嘗試使用redux-storage和redux-saga中間件進行還原。每個中間件都可以獨立工作,但是當我將redux-storage應用於redux-saga時,商店不會加載之前的狀態。我添加的中間件如下:使用redux-saga進行還原存儲 - 不保存

const combinedReducers = storage.reducer(combineReducers(reducers)); 
import createEngine from 'redux-storage-engine-reactnativeasyncstorage'; 
const engine = createEngine('storage-key'); 
const storageMiddleWare = storage.createMiddleware(engine); 
const sagaMiddleWare = createSagaMiddleware(mySagas); 
export const store = createStore(combinedReducers, applyMiddleware(sagaMiddleWare, storageMiddleWare)); 
const load = storage.createLoader(engine); 
load(store).then(() => 
    { 
     console.log("Loaded State"); 
     console.log(store.getState()); 

    }).done(); 

回答

0

D'oh!一堆'EFFECT_TRIGGERED'動作立即從REDX傳奇發出。在存儲加載之前,這些觸發器會重新存儲一個空存儲的保存事件。解決的辦法是EFFECT_TRIGGERED創造了Redux存儲中間件,像這樣的時候加入黑名單:

const storageMiddleWare = storage.createMiddleware(engine, [= 'EFFECT_TRIGGERED']); 
+0

'EFFECT_TRIGGERED'僅在dev中被觸發。模式。如果你添加一個sagaMonitor,它將攔截所有的監控事件,並且如果你在控制檯上鍵入$$ LogSagas(),你也可以打印一個saga活動的蹤跡(參見https://github.com/yelouafi/redux -saga/blob/master/examples/async/src/store/configureStore.js) –

+0

謝謝! - 您是否有與其他中間件結合使用的最佳做法,如redux-storage? – kav

1

中間件在他們傳遞到applyMiddleware的順序執行。從存儲裝載應該在傳奇中間件之前,例如:

const finalCreateStore = compose(
    applyMiddleware(
    storage.createMiddleware(engine), 
    createSagaMiddleware(sagas) 
) 
)(createStore)