Подтвердить что ты не робот

В магазине Redux нет действительного редуктора

Не удалось найти что-либо здесь относительно этой ошибки:

"Хранилище не имеет допустимого редуктора. Убедитесь, что аргумент, переданный к зеркальному компьютеру, является объектом, значения которого являются редукторами".

Мой редуктор

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;
}
4b9b3361

Ответ 1

Ваш оператор import неверен. Либо вы используете import { Foo } from 'bar' вместе с export Foo, либо используйте import Foo from 'bar', если экспортируете с помощью export default Foo.

Другими словами, измените либо export default function FriendListReducer на export function FriendListReducer, либо измените оператор импорта от import { FriendListReducer } до import FriendListReducer.

Ответ 2

Если объект пуст.

 export  default  combineReducers({

 })

Эта ошибка покажет.

Ответ 3

../редукторы/редукторы? это странное название

Во всяком случае, кажется, что.. /reducers/reducers не возвращают редуктор, если редукторы являются каталогами, помещают index.js внутрь, импортируют каждый редуктор и создают корневой редуктор

import FriendListReducer from "./FriendListReducer"

const rootReducer = combineReducers({
   friendList : FriendListReducer
})

export default rootReducer

у вас будет state.friendList в вашем штате.

Я надеюсь, что это поможет

Ответ 4

Похоже, ваша функция редуктора верхнего уровня использует массив в качестве значения по умолчанию. Redux ожидает, что сама вершина вашего состояния будет объектом, а не массивом. Попробуйте поместить массив на определенный ключ в этом объекте, например { friendList : [] }.

Ответ 5

Я встретил одно и то же сообщение об ошибке в немного другой ситуации. Я попытался поместить combineReducers в combineReducers следующим образом:

export const layoutReducer = combineReducers({
   breadcrumbs: breadcrumbsReducer,
});

export const mainReducer = combineReducers({
   layout: layoutReducer,
});

Поэтому я нашел решение - просто убрать использование combineReducer из layoutReducer и ошибка исчезла.

export const layoutReducer = {
   breadcrumbs: breadcrumbsReducer,
};

export const mainReducer = combineReducers({
   layout: layoutReducer,
});

Ответ 6

Please check your combine reducer file It empty......

you have forgot bind reducer here

import {combineReducers, createStore} from 'redux'
import listDataReducer from '../reducers/ListDataReducer'

const rootReducer = combineReducers({
    listDataReducer,         //  Please add your reducer here
});

export default rootReducer;