2016-05-05 4 views
0

Ich versuche Redux in meiner Universal-App zu implementieren, aber ich habe ein paar Probleme mit Redux. Ich habe diese configureStore Funktion:React + Redux - Erwartet, dass der Reducer eine Funktion ist

import { createStore, applyMiddleware, compose } from 'redux'; 
import thunkMiddleware from 'redux-thunk'; 
import createLogger from 'redux-logger' 
import rootReducer from '../reducers/index'; 
import { routerMiddleware } from 'react-router-redux'; 

export default function configureStore(history, initialState) { 
    const reduxRouterMiddleware = routerMiddleware(history); 
    let finalCreateStore; 

    if (__DEVELOPMENT__ && __CLIENT__ && __DEVTOOLS__) { 
    const { persistState } = require('redux-devtools'); 
    const DevTools = require('../containers/DevTools/DevTools'); 

    finalCreateStore = compose(
     applyMiddleware(thunkMiddleware)(createStore), 
     window.devToolsExtension ? window.devToolsExtension() : DevTools.instrument(), 
     persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)) 
    )(createStore); 
    } 
    else { 
    finalCreateStore = applyMiddleware(thunkMiddleware)(createStore); 
    } 

    const store = finalCreateStore(rootReducer, initialState); 

    if (__DEVELOPMENT__ && module.hot) { 
    module.hot.accept(rootReducer,() => { 
     store.replaceReducer(rootReducer); 
    }); 
    } 

    return store; 
} 

Und dann habe ich meine rootReducer-Datei, die wie folgt aussieht:

import { combineReducers } from 'redux'; 
import environment from './environment'; 
import general from './general'; 
import alert from './alert'; 
import user from './user'; 
import { routerReducer } from 'react-router-redux' 


const rootReducer = combineReducers({ 
    environment, 
    general, 
    alert, 
    user, 
    routing: routerReducer 
}); 

export default rootReducer; 

Das Problem ist, dass ich diesen Fehler: Erwartet das Reduktions eine sein Funktion. Ich habe auf StackOverflow gegoogelt und gesucht (wo es einige ähnliche Probleme gibt), aber die Antworten funktionieren in meinem Fall nicht.

Also, was mache ich falsch? und warum ?

Danke.

+0

Does '/ general','/environment', '/ alert' und'/user' alle haben ein 'export default' das ist eine Funktion? – ivarni

+0

@ivarni ist wie folgt: https://gist.github.com/inchr/60ddb797a659e7d34ae145122b1b3187 also: export default function nameReducer() {...} – Noah

+0

Probieren Sie 'console.log' auf all Ihren Reduzierungen im' rootReducer 'Datei zu sehen, welche von ihnen ist keine Funktion –

Antwort

2

versuchen:....

finalCreateStore = compose(
    // you write more than one createStore here 
    applyMiddleware(thunkMiddleware), 
    window.devToolsExtension ? window.devToolsExtension() : DevTools.instrument(), 
    persistState(window.location.href.match(/[?&]debug_session=([^&]+)\b/)) 
)(createStore); 
+0

Ich habe bereits behoben (sorry, ich hatte einen anstrengenden Tag und ich habe vergessen, hier zu antworten) ... das war das Problem – Noah

+0

Das überflüssige '(createStore)' --- zu entfernen, das ich von ähnlichem Code kopiert hatte, aber mit unterschiedlicher Syntax --- war, was es für mich löste. –

0

Haben Sie

versucht, diese
import { combineReducers } from 'redux'; 
import environment from './environment'; 
import general from './general'; 
import alert from './alert'; 
import user from './user'; 
import { routerReducer } from 'react-router-redux' 


export const rootReducer = combineReducers({ 
    environment: environment, 
    general: general, 
    alert: alert, 
    user: user, 
routing: routerReducer 
}); 

export default rootReducer; 
+0

Ja :(gleicher Fehler ... (Ich habe diese Lösung auch auf einem anderen Beitrag hier auf Stackoverflow gelesen) – Noah

+0

Versuchte, funktioniert nicht :( – Noah

Verwandte Themen