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

#javascript #reactjs #redux #react-redux #redux-thunk

#javascript #reactjs #сокращение #реагировать-redux #исправление-thunk

Вопрос:

Ниже приведен мой код для объединения хранилища и редуктора в react-redux.
Это отлично работает в моих предыдущих приложениях, возможно, из-за версии react и react-redux.

  • Но теперь я настроил новый проект react с последней версией, но получаю ошибку.

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

Код :

 import 'rxjs'
import { createStore, combineReducers, applyMiddleware } from 'redux'
import { reducer as formReducer } from 'redux-form'
import thunk from 'redux-thunk'
import promise from 'redux-promise-middleware'
import { createEpicMiddleware, combineEpics } from 'redux-observable'
// import { createLogger } from 'redux-logger'
import user, { userEpic } from './user/duck'
import userApp, { userAppEpic } from './user-app/duck'

import app from './app'

// Bundling Epics
const rootEpic = combineEpics(
  userEpic,
  userAppEpic
)

// Creating Bundled Epic
const epicMiddleware = createEpicMiddleware()

// Define Middleware
const middleware = [
  thunk,
  promise(),
  epicMiddleware
]

// Define Reducers
const reducers = combineReducers({
  app,
  user,
  userApp,
  form: formReducer
})

// Create Store
export default createStore(reducers,
  applyMiddleware(...middleware))
epicMiddleware.run(rootEpic)
  

Может кто-нибудь, пожалуйста, помочь мне решить проблему?

Комментарии:

1. удалите () здесь promise() , напишите это так: const middleware = [ thunk, promise, epicMiddleware ]

2. @MayankShukla Ты справился с этим. Пожалуйста, опубликуйте это в качестве ответа. Я приму это.

Ответ №1:

Согласно Документу:

…промежуточное программное обеспечение (аргументы): Функции, соответствующие API Redux middleware. Каждое промежуточное программное обеспечение получает функции отправки хранилища и getState в качестве именованных аргументов и возвращает функцию.

Это означает, что нам нужно передавать функции в applyMiddleware . В вашем случае вы передаете promise() вместо promise (function), поэтому он выдает ошибку:

промежуточное программное обеспечение — это не функция

Напишите это вот так:

 const middleware = [ thunk, promise, epicMiddleware ];