Redux-saga: ошибка при настройке магазина - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь создать магазин и применить к нему промежуточное ПО redux-saga.Я настроил все, но когда я запускаю проект, появляется следующая ошибка:

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

I ошибка возникает в строке 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

1 Ответ

0 голосов
/ 21 сентября 2018

Это потому, что вы не создаете 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;
}
...