react-native - Redux-saga:配置商店时出错
问题描述
我正在尝试创建一个商店并将redux-saga
中间件应用于它。我已经配置了所有东西,但是当我运行项目时,会弹出以下错误。
***Error: Before running a saga, you must mount the saga middleware on the store
using applyMiddleware
我在线出错sagaMiddleware.run(sagas);
。
store.js
import { createStore, applyMiddleware, compose } from 'redux';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';
import sagas from '../redux/sagas';
const logger = createLogger({
predicate: (getState, action) => isDebuggingInChrome,
collapsed: true,
duration: true,
diff: true,
});
export default function configureStore() {
const sagaMiddleware = createSagaMiddleware();
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
applyMiddleware(sagaMiddleware, logger),
);
sagaMiddleware.run(sagas);
return store;
}
任何想法我做错了什么?
react-native: 0.57.0
redux-saga: ^0.16.0
redux: ^4.0.0
解决方案
那是因为您没有store
正确创建,请注意您没有通过rootReducer
?
createStore
是一个增强器,它返回一个以rootReducer
为参数的函数,其结果是store
.
你可能想做这样的事情,而不是:
import { createStore, applyMiddleware, compose } from 'redux';
import { createLogger } from 'redux-logger';
import createSagaMiddleware from 'redux-saga';
import sagas from '../redux/sagas';
import rootReducer from '../redux/rootReducer';
const logger = createLogger({
predicate: (getState, action) => isDebuggingInChrome,
collapsed: true,
duration: true,
diff: true,
});
const enhancers = process.env.NODE_ENV !== 'production' && window.devToolsExtension
? [window.devToolsExtension()]
: [];
export default function configureStore() {
const sagaMiddleware = createSagaMiddleware();
const store = compose(
applyMiddleware(sagaMiddleware, logger),
...enhancers
)(createStore)(rootReducer);
sagaMiddleware.run(sagas);
return store;
}
推荐阅读
- json - Flutter - 使用 json_serializable 反序列化 firebase_messagin 通知
- ruby - 如何检查是否提供了正确的日期格式
- sas - 有没有办法在 SAS 中进行条件转置?
- reactjs - React:强制完全更新组件
- bash - 检查当前日期的文件是否存在
- c++ - C ++:用于排序元素的结构与函数
- java - 为什么我不能使用我新创建的 API 密钥?
- python - Python:使用 importlib 从字符串中动态导入模块的代码
- kotlin - 如何清除协程 Channel 发送的值?
- c# - 有没有办法中止一个线程,然后用一个新变量再次打开它?