webentwicklung-frage-antwort-db.com.de

Reagieren Sie den unerwarteten Redux-Schlüssel, um den Speicher zu erstellen

Ich erhalte die Fehlermeldung Unexpected key "characters" found in initialState argument passed to createStore. Expected to find one of the known reducer keys instead: "marvelReducer", "routing". Unexpected keys will be ignored. 

rootReducer: 

 import { combineReducers } from 'redux';
 import { routerReducer } from 'react-router-redux';
 import marvelReducer from './marvelReducer';

 const rootReducer = combineReducers({
   marvelReducer,
   routing: routerReducer
 });
 export default rootReducer;

marvelReducer: 

import { FETCH_MARVEL } from '../constants/constants';
import objectAssign from 'object-assign';

export default function marvelReducer(state = [], action) {
  switch (action.type) {
    case FETCH_MARVEL:
      return objectAssign({}, state, {characters: action.data});

    default:
      return state;
  }
}

geschäft : 

import { createStore } from 'redux';
import { syncHistoryWithStore } from 'react-router-redux';
import { browserHistory } from 'react-router';

import rootReducer from '../reducers/index';

const initialState = {
  characters: []
};

const store = createStore(rootReducer, initialState);

export const history = syncHistoryWithStore(browserHistory, store);

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

export default store;

Ich habe sehr ähnlichen Code in einer anderen Anwendung und es funktioniert gut. Nicht sicher, was hier los ist

11
erichardson30

Es gibt eine kleine Unstimmigkeit zwischen dem, was Sie als Anfangszustand des Geschäfts festlegen, und dem, was Sie dem Geschäft sagen sollen, um den ursprünglichen Zustand des Geschäfts zu erwarten, z. - Aktualisieren Sie Ihre ursprünglichen Einstellungen für den Store als solche: 

const initialState = {
   marvel: {
     characters: []
   }
};

Und es ist auch eine gute Idee, den Inhabern der Zustandsbaumvariablen aussagekräftige Namen zu geben, die keinen Reducer enthalten 

const rootReducer = combineReducers({
   marvelReducer,
   routing: routerReducer
});

zu 

const rootReducer = combineReducers({
   marvel: marvelReducer,
   routing: routerReducer
});

Und das sollte den Trick für Sie tun.

Hoffe das hilft,

PS. einige Dokumente.

Von den Dokumenten :

Wenn Sie ein Reduktionsgetriebe mit kombinierten Reduktionsgeräten hergestellt haben, muss es sich dabei um ein einfaches Objekt handeln, das dieselbe Form hat wie die Schlüssel, die es übergeben hat. Andernfalls können Sie alles übergeben, was Ihr Reduzierer verstehen kann.

Wenn Sie keine Aktionen ausführen müssen, die sich auf one oder two beziehen, ziehen Sie sie einfach an. Dies könnte so einfach sein wie

export default combineReducers({
  events,
  flash,
  one: (state = {}) => state,
  two: (state = {}) => state
})
9
Elod Szopos

Um zu elod answer hinzuzufügen, hat das Geschäftsstatusobjekt unterschiedliche Eigenschaften oder unterschiedliche Datenabschnitte:

{a:data,b:data,c:data}

Wenn Sie Reduzierer kombinieren, MÜSSEN Sie jede Eigenschaft des Statusobjekts einem anderen Reduzierer zuordnen

{a:reducerOfDataA,b:reducerOfDataB,c:reducerOfDataC}

Dies ist ein Mechanismus in Redux, der die Trennung der Datenbedenken für jeden Reducer erzwingt. ReducerOfDataA kann die Daten von ReducerOfDataB nicht ändern. Dies bedeutet, dass alle Daten von reducerOfDataA unter {a: ...} und nicht unter verschiedenen Eigenschaften direkt auf das Stammstatusobjekt {partA1: ..., partA2: ...} aufgeteilt werden müssen.

Ich habe die ganze Nacht gebraucht, um das herauszufinden. Hoffe, dieser kleine Kommentar wird deinen retten.

1
James Roeiter

Ich habe das gleiche Problem und kann der Logik einer dieser möglichen Lösungen nicht folgen.

Die zu kombinierenden Argumente sind Verweise auf Reduziererobjekte, nicht Zustandsschlüssel. Der Schlüsselfehler ist so kryptisch wie die meisten anderen Redux-Fehler und in der Tat die meisten Antworten oder möglichen Lösungen, die ihnen angeboten werden.

0
stevematdavies