В моем приложении уже есть большая коллекция селекторов, используемых различными объектами-контейнерами. Они отлично подходят для доступа к различным частям состояния и значительно упрощают рефакторинг состояния.
Теперь я хочу использовать свои селекторы внутри некоторых функций редуктора. Проблема в том, что внутри редьюсера параметр state
относится к определенному фрагменту состояния, тогда как функции селектора ожидают вызова с корневым объектом состояния.
Надуманный пример:
/* 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
}
}