代码之家  ›  专栏  ›  技术社区  ›  Shivam

Redux saga:配置存储时出错

  •  0
  • Shivam  · 技术社区  · 7 年前

    我正在尝试创建一个商店并申请 redux-saga

    ***Error: Before running a saga, you must mount the saga middleware on the store
    using applyMiddleware
    

    我在网上看到了错误 sagaMiddleware.run(sagas); .

    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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Josep    7 年前

    store 请注意,您没有通过 rootReducer ?

    createStore 是一个增强器,它返回一个接受 减根剂 作为参数,其结果是 商店

    你可能想这样做:

    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;
    }