web-dev-qa-db-fra.com

Le magasin Redux n'a pas de réducteur valide

Je n'ai rien trouvé ici concernant cette erreur:

"Store n'a pas de réducteur valide. Assurez-vous que l'argument passé à combineReducers est un objet dont les valeurs sont des réducteurs."

Mon réducteur

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

Combiner

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

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

Ma configuration de magasin

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;
}
26
chrysillo

Votre instruction import est incorrecte. Soit vous utilisez import { Foo } from 'bar' ensemble avec export Foo, o utilisez import Foo from 'bar' si vous exportez avec export default Foo.

En d'autres termes, modifiez export default function FriendListReducer à export function FriendListReducer, ou remplacez l'instruction d'importation par import { FriendListReducer } à import FriendListReducer.

29
dannyjolie

Si l'objet est vide.

 export  default  combineReducers({

 })

Cette erreur apparaîtra.

18
jiexishede

../reducers/reducers? c'est un nom étrange

Quoi qu'il en soit, il semble que ../reducers/reducers ne retourne pas de réducteur, si reducers est un répertoire, mettez un index.js à l'intérieur, importez chaque réducteur et créez un réducteur racine

import FriendListReducer from "./FriendListReducer"

const rootReducer = combineReducers({
   friendList : FriendListReducer
})

export default rootReducer

vous aurez state.friendList dans votre état.

J'espère que cela aidera

4
Exayy

Il semble que votre fonction de réduction de niveau supérieur utilise un tableau comme valeur par défaut. Redux s'attend à ce que le sommet de votre état soit un objet, pas un tableau. Essayez de placer le tableau sur une clé particulière de cet objet, comme { friendList : [] }.

0
markerikson