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