Redux 商店没有有效的减速器

IT技术 reactjs redux reducers
2021-04-15 01:26:49

在这里找不到关于此错误的任何信息:

“Store 没有有效的 reducer。确保传递给 combineReducers 的参数是一个值为 reducer 的对象。”

我的减速机

export default function FriendListReducer(state = {friends : []}, action) {
  switch (action.type) {
    case 'ADD_FRIEND':
      return [
        { friends : action.payload.friend }, ...state.friends
      ]     
    default:
      return state;
  }
  return state;
}

合路器

import { combineReducers } from 'redux';
import { FriendListReducer } from './FriendListReducer';

const rootReducer = combineReducers({
  friends: FriendListReducer
});
export default rootReducer;

我的店铺配置

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

export default function configureStore(initialState = { friends: [] }) {
  const logger = createLogger({
    collapsed: true,
    predicate: () =>
    process.env.NODE_ENV === `development`, // eslint-disable-line no-unused-vars
  });

  const middleware = applyMiddleware(thunkMiddleware, logger);

  const store = middleware(createStore)(rootReducer, initialState);

  if (module.hot) {
    // Enable Webpack hot module replacement for reducers
    module.hot.accept('../reducers/reducers', () => {
      const nextRootReducer = require('../reducers/reducers').default;
      store.replaceReducer(nextRootReducer);
    });
  }

  return store;
}
6个回答

你的import说法是不正确的。无论您使用import { Foo } from 'bar'一起export Foo或者使用import Foo from 'bar',如果你有出口export default Foo

换句话说,更改export default function FriendListReducerexport function FriendListReducer,或将导入语句从 更改import { FriendListReducer }import FriendListReducer

如果对象为空。

 export  default  combineReducers({

 })

将显示此错误。

../减速机/减速机?这是一个奇怪的命名

无论如何,似乎../reducers/reducers 不返回reducer,如果reducers 是一个目录,在里面放一个index.js,导入每个reducer 并创建一个root reducer

import FriendListReducer from "./FriendListReducer"

const rootReducer = combineReducers({
   friendList : FriendListReducer
})

export default rootReducer

重要的!! 您将在您的州拥有 state.friendList。

我希望它会有所帮助

让我感到困惑的是有几个具有相同名称(索引)的文件。我的组合器在 reducers 文件夹中被命名为 reducers.js,它的设置正如你所提到的
2021-06-16 01:26:49

看起来您的顶级 reducer 函数正在使用数组作为其默认值。Redux 期望状态的最顶端是一个对象,而不是一个数组。尝试将数组放在该对象中的特定键上,例如{ friendList : [] }.

我已经更新了代码,但仍然出现相同的错误,在此处更新代码
2021-06-14 01:26:49
您传递给商店的“initialState”值与您使用创建的结构不匹配combineReducers您提供combineReducers了一个名为 的字段FriendListReducer,但商店初始状态为friends您需要以一种或另一种方式使它们匹配。由于它们不匹配,因此您仍然遇到同样的问题。
2021-06-17 01:26:49

我也遇到了这个问题。我所做的不是:

combineReducers(productReducer, cartReducer)

我做了:

combineReducers({ productReducer, cartReducer })

它奏效了。它需要一个有效的商店对象。