Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs TypeError:中间件不是一个函数_Reactjs_Redux_React Redux_Redux Thunk - Fatal编程技术网

Reactjs TypeError:中间件不是一个函数

Reactjs TypeError:中间件不是一个函数,reactjs,redux,react-redux,redux-thunk,Reactjs,Redux,React Redux,Redux Thunk,我正在尝试在我的reactjs应用程序中应用redux。由于以下错误,我无法继续: 我确信我已经安装了所需的所有依赖项。下面是my package.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", } 下面是我的i

我正在尝试在我的reactjs应用程序中应用redux。由于以下错误,我无法继续:

我确信我已经安装了所需的所有依赖项。下面是my package.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')
);
从'redux'导入{createStore,applyMiddleware};
从'react redux'导入{Provider};
从“redux thunk”导入thunk中间件;
从“redux logger”导入createLogger;
从“./reducers”导入减速机;
const logger=createLogger();
常量存储=创建存储(减缩器,
applyMiddleware(
Thunk中间件,记录器
)
)
ReactDOM.render(
,
document.getElementById('root'))
);
根据您正在混合使用的
redux记录器

您需要导入特定的
createLogger
函数

import { createLogger } from 'redux-logger'

const logger = createLogger({
  // ...options
});
或者使用默认导入

import logger from 'redux-logger'
然后你的代码就可以了

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

我没有在依赖项中看到react和react dom,它也没有包含在导入语句中

让我为您提供一个例子,说明我最近是如何使用redux开发者工具开发一个应用程序的,这非常令人惊讶

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')
    );
从“React”导入React;
从“react dom”导入react dom;
从'react redux'导入{Provider};
从'redux'导入{createStore,combinereducer,applyMiddleware,compose};
从“redux thunk”导入redux thunk;
从“./components/App”导入应用程序;
从“../reducers/auth”导入authReducer;
从“../reducers/url”导入urlsReducer;
const composeinhancers=window.uuu REDUX_DEVTOOLS_EXTENSION_u124;COMPOSE|COMPOSE;
//店铺创建
const store=createStore(
组合传感器({
auth:auth,
URL:urlsReducer
}),
复合容器(applyMiddleware(reduxThunk))
);
ReactDOM.render(
,
document.getElementById('root'))
);
我想您只需要在reduxThunk之后添加logger。如果您已经组合了减速器,那么只需提供减速器而不是组合减速器

问候,,
Rafael

我得到了相同的错误类型错误:中间件不是一个函数

从“redux”导入{createStore,combinereducer,applyMiddleware};
从“redux logger”导入{createLogger};
从“redux thunk”导入thunk;
从“/reducers/mathReducer”导入数学;
从“/reducers/userReducer”导入用户;
const logger=createLogger();
导出默认createStore(
组合减速机({math,user}),
{},
applyMiddleware(记录器,thunk)

);解决此问题的最简单方法

import * as thunk from 'redux-thunk';



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

我只是在开发中尝试将
logger
添加到中间件列表中,但将导入搞砸了,并收到了相同的错误。要解决我的问题,我需要将
.default
添加到
require()

const中间件=[]
if(process.env.NODE_env===‘development’){
push(require('redux-logger')。默认值)
}

请查找以下解决方案代码:

const thunkMiddleware = require('redux-thunk').default;

const store = createStore(reducer, applyMiddleware(thunkMiddleware));

在我的例子中,我是在存储方法之前调用中间件函数的

谢谢您的回答!使用默认导入并将其传递给applyMiddleware对我来说很有用。另外,感谢您参考文档。
const thunkMiddleware = require('redux-thunk').default;

const store = createStore(reducer, applyMiddleware(thunkMiddleware));