【发布时间】:2018-09-06 08:50:08
【问题描述】:
我需要在我的 redux 应用程序中使用存储增强器(来自 react-redux-firebase 的 reactReduxFirebase)。这个增强器调度一个动作,它看起来或多或少像这样(非常简化):
const reactReduxFirebase = (next) => {
return (reducer, initialState, middleware) => {
const store = next(reducer, initialState, middleware);
store.dispatch({
type: 'DUMMY_ACTION'
});
return store;
}
}
// usage
const sagaMiddleware = createSagaMiddleware();
const middleware = [sagaMiddleware];
const store = createStore(
reducer,
initialState,
compose(
applyMiddleware(...middleware),
reactReduxFirebase
)
);
sagaMiddleware.run(sagas);
// sagas.js
function* handle(action) {
console.log(action);
}
function* saga() {
yield takeEvery('*', handle);
}
export default saga;
我希望 saga 监听所有动作并控制台记录它们,但它没有捕获增强器调度的“DUMMY_ACTION”,因为它是在 saga 开始监听之前调度的 (sagaMiddleware.run(sagas);)。从 redux-saga 文档看来,saga 必须在 applyMiddleware 之后运行,所以我不能让 saga 在增强器之前运行。有什么办法让它工作,所以传奇也会从增强器中捕捉到一个动作?
【问题讨论】:
-
您是否尝试过颠倒 compose 的参数顺序。这样,firebase 将通过 saga-enhanced createStore 这可能会解决您的问题。
标签: reactjs redux react-redux redux-saga