Ich habe einen Haken gefunden, wenn Update-Zustand mit Redux und Reactive-Redux. Wenn ich ein einzelnes Statussegment aktualisiere, werden alle anderen entfernt. Ich weiß, dass die Antwort einfach sein wird, aber ich kann es nicht herausfinden und habe nichts anderes online gefunden.Wie aktualisiere ich bestimmte Schicht von Redux-Zustand in React
So zu klären, hier ist mein Minderer:
const initialState = {
selectedLevel: null,
selectedVenue: null,
selectedUnitNumber: null,
selectedUnitName: null,
selectedYear: null
}
export default (state = initialState, action) => {
console.log('reducer: ', action);
switch (action.type){
case 'CHOOSE_LEVEL':
return action.payload;
case 'CHOOSE_VENUE':
return action.payload;
case 'CHOOSE_UNIT':
return action.payload;
case 'SHOW_COURSES':
return action.payload;
}
return state;
}
Und mein kombinieren Minderer:
workshopSelection: {
selectedLevel: null,
selectedVenue: null,
selectedUnitNumber: null,
selectedUnitName: null,
selectedYear: null
}
Aber wenn ich benutze:
export default combineReducers({
workshopSelection: WorkshopSelectReducer
});
Also mein Ausgangszustand wie folgt aussieht Einer meiner Ersteller von Aktionen, zum Beispiel:
export function chooseVenue(venue){
return {
type: 'CHOOSE_VENUE',
payload: {
selectedVenue: venue
}
}
}
ich am Ende mit Zustand wie folgt aussehen:
workshopSelection: {
selectedVenue: 'London',
}
Der ganze Rest des Staates in diesem Objekt, das nicht von dieser Aktion betroffen Schöpfer wurde komplett ausgelöscht wurde. Stattdessen möchte ich nur, dass alle anderen Einträge so bleiben, wie sie sind, mit ihren ursprünglichen Werten - null
in diesem Beispiel, oder was auch immer anderen Wert ihnen zugewiesen wurde.
Ich hoffe, dass alles einen Sinn ergibt.
Prost!
Brilliant - zweite Option funktioniert, danke. Übrigens habe ich versucht, Spread-Operatoren zu verwenden, aber es warf immer einen Syntaxfehler beim ersten '. '- liegt das an ihrem experimentellen Charakter? Ich benutze webpack und babel, um meinen Code zu transpilieren und Spread-Operatoren in anderen Teilen der Anwendung ohne Probleme verwendet zu haben, aber aus irgendeinem Grund hat es auf diesem einen nicht funktioniert. Irgendeine Idee, warum das ist - die ES6-Syntax ist viel schöner, also möchte ich es verwenden, wo immer es möglich ist! – Chris
Ich gehe davon aus, dass Sie Array Spread verwendet haben, was Teil der ES6-Syntax ist.Der Objekt-Spread ist etwas anderes, momentan in Stufe 2 (so müssen wir leider mindestens bis ES2018 warten). Wenn Sie Babel 6 verwenden, benötigen Sie [Objekt Rest Spread Plugin] (https://babeljs.io/docs/plugins/transform-object-rest-spread/). – mdziekon
Natürlich - ja, die anderen Zeiten, die ich es benutzt habe, waren mit Arrays, keine Objekte. Brilliant, danke für deine Hilfe! – Chris