2017-09-13 1 views
0

Kann mir jemand mit der richtigen redux store Konfiguration helfen?kann nicht mehrere Middlewares mit Redux anwenden applyMiddleware Funktion

ich zu konfigurieren versuche wie folgt

configureStore.js

import thunk from 'redux-thunk'; 
import logger from 'redux-logger'; 
import { createStore, applyMiddleware } from 'redux'; 
import rootReducer from '../reducers'; 

let middlewares = [thunk, logger] 

const configureStore =() => { 
    const store = createStore(
    rootReducer, 
    applyMiddleware(...middlewares) // I also tried with applyMiddleware(thunk, logger) 
); 

    return store; 
} 

export default configureStore; 

Und ich importieren dieses Modul Haupt js Datei und verwenden Sie wie folgt vor,

index.js

import configureStore from '../stores/configureStore'; 

const store = configureStore(); 

// And other DOM render code follows... 

aber ist, scheint nicht funktioniert und die folgenden Fehleranzeigen in der Webkonsole,

Fehler: Uncaught Typeerror: WEBPACK_IMPORTED_MODULE_0__compose .a.apply (...) ist keine Funktion

Error

Datei, in der der Fehler: enter image description here

ich offizielle Dokumentation von redux, redux-thunk und redux-logger aber nicht in der Lage bin nach damit es funktioniert.

Ein weiterer Hinweis: Es funktioniert gut, wenn ich eines der thunk und logger aus der Midwares-Liste entfernen.

UPDATE: I got temporary fix

Downgrading redux von 3.7.2 zu 3.5.2 funktioniert gut.

Ich frage mich immer noch, warum es das Problem mit der neuesten Version von ist. Ich habe versucht, weitere Informationen zu diesem Problem hinzuzufügen und nach Lösungen für zukünftige Upgrades zu suchen.

Danke!

+0

Ich stelle fest, dass 'rootReducer' in configureStore.js verwendet wird, aber nie definiert oder importiert wird. Ist das das Problem? Oder hast du es einfach aus dem Beispiel herausgelassen? –

+0

rootReducer ist definiert. –

Antwort

0

Sie haben gerade einen kleinen Fehler gemacht.

Von der offiziellen docs, hier ist die Unterschrift von creates:

createStore(reducer, [preloadedState], [enhancer]) 

Sie gemischt, um die Reihenfolge der Argumente auf, Ihre Enhancer-Funktion vorbei (applyMiddleware), wobei die Funktion die preloadedState erwartet. Sie müssen ein Argument zwischen dem rootReducer und der applyMiddleware-Funktion übergeben, um die Signatur zu erfüllen.

Hoffe das half!

+1

'createStore' _does_ unterstützt tatsächlich die Übergabe des Enhancers als zweites Argument anstelle von' preloadedState'. – markerikson

+0

Kein Glück. Ich habe versucht, Standardzustandsobjekt als zweites Argument zu übergeben. Ich denke @markerikson hat Recht –

Verwandte Themen