Ошибка типа: промежуточное ПО не является функцией

11

Я пытаюсь применить redux в моем приложении. Из-за этих ошибок я не могу:

Изображение 10292

Изображение 10293

Я уверен, что я уже установил все зависимости, которые мне нужны. Вот важная часть моего пакета.json

"dependencies": {
   "react-redux": "^5.0.6",
   "redux": "^3.7.2",
   "redux-logger": "^3.0.6",
   "redux-promise": "^0.5.3",
   "redux-thunk": "^2.2.0",
}

Вот часть моего index.js, которая реализует redux

import { createStore, applyMiddleware } from 'redux';
import { Provider } from 'react-redux';
import thunkMiddleware from 'redux-thunk';
import createLogger from 'redux-logger';
import reducers from './reducers';

const logger = createLogger();
const store = createStore(reducers,
    applyMiddleware(
        thunkMiddleware, logger
    )
)

ReactDOM.render(
    <Provider store={store}>
        <App />
    </Provider>,
    document.getElementById('root')
);
Теги:
react-redux
redux
redux-thunk

4 ответа

19
Лучший ответ

В соответствии с документами вы смешиваете использование redux-logger

Вам нужно либо импортировать определенную функцию createLogger

import { createLogger } from 'redux-logger'

const logger = createLogger({
  // ...options
});

Или используйте импорт по умолчанию

import logger from 'redux-logger'

И тогда ваш код должен быть в порядке

const store = createStore(
  reducers,
  applyMiddleware(thunkMiddleware, logger)
)
  • 1
    Спасибо за Ваш ответ! использование импорта по умолчанию и передача его в applyMiddleware работает для меня. Кроме того, спасибо за ссылку на документ.
1

Я не вижу реагирования и реагирования в ваших зависимостях, и он не включен в операторы импорта.

Позвольте мне представить вам пример того, как я сделал приложение в последнее время, также используя инструменты разработчика decx, которые потрясающе.

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, combineReducers, applyMiddleware, compose } from 'redux';
import reduxThunk from 'redux-thunk';
import App from './components/App';
import authReducer from '../reducers/auth';
import urlsReducer from '../reducers/urls';

const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

//Store creation
  const store = createStore(
    combineReducers({
      auth: authReducer,
      urls: urlsReducer
    }),
    composeEnhancers(applyMiddleware(reduxThunk))
  );

ReactDOM.render(
      <Provider store={store}>
        <App />
      </Provider>,
      document.getElementById('root')
    );

Я бы подумал, что вам просто нужно добавить регистратор, после reducexThunk. И если вы уже объединили свои редукторы, тогда просто предоставляйте редукторы вместо combReducers.

С уважением, Рафаэль

0

самый простой способ исправить проблему import * как thunk из 'redux-thunk';

createStore (rootReducer, InitialState, applyMiddleware (thunk.default));

0

Я получал ту же ошибку TypeError: промежуточное ПО не является функцией.

import { createStore, combineReducers, applyMiddleware } from "redux";
import { createLogger } from "redux-logger";
import thunk from "redux-thunk";

import math from "./reducers/mathReducer";
import user from "./reducers/userReducer";

const logger = createLogger();

export default createStore(
  combineReducers({ math, user }),
  {},
  applyMiddleware(logger, thunk)
);

Для applyMiddleware(logger, thunk) замена applyMiddleware(logger, thunk) с applyMiddleware(logger, thunk.default).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню