Sagen wir, ich Zustand wie dieses (mit normalizr) normalisiert habenBulk-Aktualisierung normalisierte Redux Zustand
entities: {
todos: {
'aaa': {
id: 'aaa',
text: 'Todo A',
completed: false
},
'bbb': {
id: 'bbb',
text: 'Todo B',
completed: false
},
'ccc': {
id: 'ccc',
text: 'Todo C',
completed: false
}
}
}
Dann habe ich eine Aktion, die Array von IDs vom Server abruft, die abgeschlossen sind. Aus diesem Aktionstyp habe ich Minderer wie folgt aus:
const todos = (state = initialState, action) => {
switch (action.type) {
case ActionTypes.FETCH_COMPLETED_SUCCESS:
return {
...state,
todos: action.payload.completedIds.map((id) => {
return {
[id]: {
...state.todos[id],
completed: true
}
}
})
};
default:
return state;
}
};
Wenn ich ein Array empfangen mit [ ‚aaa‘, ‚ccc‘] (Tausende von Artikeln in der realen Welt app sein könnte), ich setzen wollen " abgeschlossen "zu den jeweiligen Todos in einer einzigen Aktion, ist es möglich?
Meine aktuelle Implementierung von Reducer funktioniert nicht, da sie ein Array von Objekten zurückgibt, während der ursprüngliche normalisierte Zustand Objekt mit IDs als Schlüssel ist.
Danke.
Dies funktionierte, musste nur einen kleinen Syntaxfehler beheben. newTodos [ID]: {...} zu newTodos [ID] = {...} – Razz
Fühlen Sie sich frei, die Antwort zu bearbeiten. –