Lorsque j'ajoute un middleware pour chrome, les réducteurs cessent de fonctionner correctement sur le site (mais l'outil de débogage chrome/redux fonctionne) + j'obtiens l'erreur suivante dans la console:
L'état précédent reçu par le réducteur a un type de "Fonction" inattendu. L'argument attendu doit être un objet avec les clés suivantes: "auth", "common", "home"
Voici le code:
import { applyMiddleware, createStore } from 'redux';
import { promiseMiddleware, localStorageMiddleware } from './middleware';
import reducer from './reducer';
const middleware = applyMiddleware(promiseMiddleware, localStorageMiddleware);
const store = createStore(reducer, middleware,
window.devToolsExtension ? window.devToolsExtension() : f => f);
export default store;
Si je supprime chrome part:
,window.devToolsExtension ? window.devToolsExtension() : f => f
Si fonctionne à nouveau normalement.
createStore
prend jusqu'à 3 arguments. Si le deuxième argument est une fonction, il suppose que votre deuxième argument est le renforceur de magasin. S'il s'agit d'un objet ou il y a 3 arguments présents il suppose que l'argument est votre état initial . Voir ici .
Votre variable middleware est un amplificateur de magasin et l'extension chrome est également un amplificateur:
window.devToolsExtension ? window.devToolsExtension() : f => f
Vous devez composer les deux dans une seule fonction:
import { applyMiddleware, createStore, compose } from 'redux';
import { promiseMiddleware, localStorageMiddleware } from './middleware';
import reducer from './reducer';
const middleware = applyMiddleware(promiseMiddleware, localStorageMiddleware);
const store = createStore(
reducer,
compose(middleware, window.devToolsExtension ? window.devToolsExtension() : f => f)
);
export default store;
La documentation pour cela peut être trouvée ici .
createStore
accepte les arguments suivants :
Si seulement deux arguments sont fournis et que le deuxième argument est une fonction, alors il est considéré comme un amplificateur. Voir plus dans le code source .
Si vous voulez utiliser les devtools de Redux, alors vous devez compose
en tant qu'améliorateur supplémentaire.
import { applyMiddleware, createStore, compose } from 'redux';
const store = createStore(
reducer,
compose(
middleware,
window.devToolsExtension ? window.devToolsExtension() : f => f
)
)
J'espère que cela pourra aider. Pozdrav ????