2016-07-20 8 views
3

Dies ist, wie ich meinen Speicher erstellenredux devtools Uncaught Fehler: Aktionen müssen einfache Objekte sein. Verwenden Sie benutzerdefinierte Middleware für Asynchron-Aktionen

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

const debugware = []; 
if (process.env.NODE_ENV !== 'production') { 
    const createLogger = require('redux-logger'); 
    debugware.push(createLogger({ 
    collapsed: true 
    })); 
} 

export default function configureStore(history, initialState) { 
    const store = createStore(
    rootReducer, 
    initialState, 
    window.devToolsExtension ? window.devToolsExtension() : f => f, 
    applyMiddleware(thunkMiddleware, routerMiddleware(history), ...debugware), 
); 

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

    return store; 
} 

Aber meine App nicht mehr funktioniert und ich kann finden, warum. Irgendein Vorschlag bitte.

Antwort

4

Sie können dies versuchen:

import { createStore, applyMiddleware, compose } from 'redux'; 

const store = createStore(
    rootReducer, 
    initialState, 
    compose(
    applyMiddleware(thunkMiddleware, routerMiddleware(history), ...debugware), 
    window.devToolsExtension ? window.devToolsExtension() : f => f 
) 
); 
+0

Wie soll ich den gleichen Code ohne 'Middleware' und' initialState' schreiben? –

+1

Sie können initialState durch ein leeres Objekt wie {} ersetzen, aber um Async-Aktionen zu verarbeiten, benötigen Sie eine benutzerdefinierte Middleware, Sie könnten Ihre eigene schreiben oder thunkMiddleware von redux-thunk package – steppefox

+0

Ich habe es geschafft, compose mit nur einem Argument: ' window.devToolsExtension'. Guter Trick mit 'initalState' als leeres Objekt. In der Zwischenzeit habe ich bereits eine Saga-Middleware installiert. –

1

Der Enhancer DevTools immer in Compose die letzte sein sollte, so wird es über andere Middle und Enhancer wissen.

Zusätzlich, falls Sie wollen remote Aktionen versenden, sollten Sie auch hinzufügen:

if (window.devToolsExtension) window.devToolsExtension.updateStore(store) 

Wie in troubleshooting angegeben.

Verwandte Themen