Réagir+Redux - Erreur non Interceptée: le réducteur être une fonction
J'ai essayé de simples réagir,redux,ajax exemple de travail et de suivi Reddit API tutorial, mais je ne peux pas créer de magasin et obtenez l'erreur:
Uncaught Error: Expected the reducer to be a function.
index.jsx
...
import { createStore, applyMiddleware } from 'redux'
var thunkMiddleware = require('redux-thunk');
var createLogger = require('redux-logger');
var rootReducer = require('./reducers.js');
const loggerMiddleware = createLogger();
function configureStore(initialState) {
return createStore(
rootReducer,
initialState,
applyMiddleware(
thunkMiddleware,
loggerMiddleware
)
)
}
const store = configureStore();
...
rootReducer.js
import { combineReducers } from 'redux';
function products(state = {
isFetching: false,
didInvalidate: false,
items: []
}, action) {
switch (action.type) {
case 'REQUEST_PRODUCTS':
return Object.assign({}, state, {
isFetching: true,
didInvalidate: false
})
case 'RECEIVE_PRODUCTS':
return Object.assign({}, state, {
isFetching: false,
didInvalidate: false,
items: action.posts,
lastUpdated: action.receivedAt
})
default:
return state
}
}
function specialPosts(state = { }, action) {
switch (action.type) {
case RECEIVE_SPECPOSTS:
case REQUEST_SPECPOSTS:
return Object.assign({}, state, {
req: true
})
default:
return state
}
}
const rootReducer = combineReducers({
products,
specialPosts
});
export default rootReducer;
Type de rootReducer est l'objet, mais pourquoi? Dois-je changer createStore
fonction de rootReducer.default
?
return createStore(
rootReducer.default,
initialState,
applyMiddleware(
thunkMiddleware,
loggerMiddleware
)
)
paquet.json
"redux-logger": "^2.6.1",
"react-redux": "^4.4.1",
"react-redux-provide": "^5.2.3",
"redux": "^3.3.1",
"redux-thunk": "^2.0.1",
mauvais code. J'ai déjà édité.
J'ai besoin de rootReducer
J'ai besoin de rootReducer
var rootReducer = require('./reducers.js').default;
OriginalL'auteur Matt | 2016-04-02
Vous devez vous connecter pour publier un commentaire.
L'état initial est alors créé automatiquement à partir de l'état initial renvoyé par la personne réducteur de fonctions. Chacun de ces états peut être accédé comme
state.products
etstate.specialPosts
vous pourriez avoir besoin d'ajouter plus d'explications à donner un sens à d'autres qui cherche résolution similaire.
OriginalL'auteur Tom
Le problème était dû à rootReducer importés par "l'exigent" (ES5):
Si vous l'importer via l'ES6 méthode, il va enregistrer correctement l'rootReducer.js par défaut automatiquement dans rootReducer comme prévu:
Je vois que vous êtes de mélange ES5 (exiger) et ES6 (importation) dans ce fichier...j'ai mixé dans mon projet, c'est pourquoi j'ai rencontré ce problème. Plus d'informations peuvent être trouvées ici: https://medium.com/@kentcdodds/misunderstanding-es6-modules-upgrading-babel-tears-and-a-solution-ad2d5ab93ce0#.2x2p2dx3m
OriginalL'auteur Mike Lambert
rootReducer
import {AppReducer} from './reducers';
sera d'erreur!OriginalL'auteur
J'utilise VS Code Initiés et parfois, les modifications ne sont pas enregistrées correctement. Donc, si vous avez suivi tous les ci-dessus et l'erreur est encore d'y aller à chaque fichier et appuyez sur CTRL+S. Il a résolu le problème pour moi.
OriginalL'auteur Matthis Kohli
Lorsque vous créez magasin premier argument doit être une fonction qui signifie réduire(
()=>[]
) paramètreErreur:
Solution:
OriginalL'auteur KARTHIKEYAN.A