Meine App verfügt bereits über eine große Auswahl von Selektoren, die von den verschiedenen Containerobjekten verwendet werden. Diese eignen sich hervorragend für den Zugriff auf verschiedene Teile des Zustands und erleichtern das Refactoring des Zustands erheblich.So verwenden Sie Selektoren erneut in einem Redux-Reduzierer
Jetzt möchte ich meine Selektoren in einigen meiner Reducer-Funktionen verwenden. Das Problem ist, dass innerhalb des Reduzierers der Parameter state
auf eine bestimmte Teilmenge des Status verweist, während die Auswahlfunktionen erwarten, dass sie mit dem Statusstammobjekt aufgerufen werden.
konstruiertes Beispiel:
/* Selectors */
const getTodos = state => state.todos;
const getUncompletedTodos = createSelector(
[ getTodos ],
todos => todos.filter(t => !t.completed)
);
/* Reducer */
const todosReducer = (state, action) => {
switch (action.type) {
case 'ADD_TODO':
return [
...state,
{
id: action.id,
text: action.text,
completed: false
}
];
case 'REMOVE_COMPLETED_TODOS':
return getUncompletedTodos(state); // <-- this won't work
}
}
Ja, gute Lösung – burtyish
Warum würden Sie nicht die Vorteile der memoization nehmen im getUncompletedTodos-Selektor? – user2602152
@ user2602152 Sie rufen Reducer auf, um den Status zu ändern. Memoization hier ist wie immer Cache fehlt. –