TypeError: middleware is not a function
TypeError: middleware is not a function
我正在尝试在我的 reactjs 应用程序中应用 redux。由于这些错误,我无法继续:
我确定我已经安装了我需要的所有依赖项。这是我的相关部分 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')
);
根据 docs 你混淆了 redux-logger
的用法
您要么需要导入特定的 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,它也没有包含在导入语句中。
我给大家举个例子,说说我最近是如何做一个App的,也是用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')
);
我想你只需要在 reduxThunk 之后添加记录器。如果你已经组合了你的减速器,那么只需提供减速器而不是 combineReducers。
此致,
拉斐尔
我遇到了同样的错误 TypeError: middleware is not a function。
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.default)
替换 applyMiddleware(logger, thunk)
对我有用。
解决问题的最简单方法
import * as thunk from 'redux-thunk';
createStore(rootReducer, InitialState, applyMiddleware(thunk.default));
我试图仅在开发中将 logger
添加到中间件列表中,但弄乱了导入并收到了相同的错误。要解决我的问题,我需要将 .default
添加到 require()
:
const middleware = []
if (process.env.NODE_ENV === 'development') {
middleware.push(require('redux-logger').default)
}
import logger from 'redux-logger';
import thunk from 'redux-thunk';
import reduxPromiseMiddleware from 'redux-promise-middleware';
import { applyMiddleware, createStore } from 'redux';
const middleware = applyMiddleware(reduxPromiseMiddleware, thunk, logger);
const store = createStore(reducer, middleware);
请在下面找到解决方案的代码:
const thunkMiddleware = require('redux-thunk').default;
const store = createStore(reducer, applyMiddleware(thunkMiddleware));
在我的例子中,我在存储方法之前调用了中间件函数
只需在createStore函数中添加.default即可解决Middleware is not a function[=16] =].
我正在尝试在我的 reactjs 应用程序中应用 redux。由于这些错误,我无法继续:
我确定我已经安装了我需要的所有依赖项。这是我的相关部分 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')
);
根据 docs 你混淆了 redux-logger
您要么需要导入特定的 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,它也没有包含在导入语句中。
我给大家举个例子,说说我最近是如何做一个App的,也是用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')
);
我想你只需要在 reduxThunk 之后添加记录器。如果你已经组合了你的减速器,那么只需提供减速器而不是 combineReducers。
此致, 拉斐尔
我遇到了同样的错误 TypeError: middleware is not a function。
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.default)
替换 applyMiddleware(logger, thunk)
对我有用。
解决问题的最简单方法
import * as thunk from 'redux-thunk';
createStore(rootReducer, InitialState, applyMiddleware(thunk.default));
我试图仅在开发中将 logger
添加到中间件列表中,但弄乱了导入并收到了相同的错误。要解决我的问题,我需要将 .default
添加到 require()
:
const middleware = []
if (process.env.NODE_ENV === 'development') {
middleware.push(require('redux-logger').default)
}
import logger from 'redux-logger';
import thunk from 'redux-thunk';
import reduxPromiseMiddleware from 'redux-promise-middleware';
import { applyMiddleware, createStore } from 'redux';
const middleware = applyMiddleware(reduxPromiseMiddleware, thunk, logger);
const store = createStore(reducer, middleware);
请在下面找到解决方案的代码:
const thunkMiddleware = require('redux-thunk').default;
const store = createStore(reducer, applyMiddleware(thunkMiddleware));
在我的例子中,我在存储方法之前调用了中间件函数
只需在createStore函数中添加.default即可解决Middleware is not a function[=16] =].