Как предполагает этот курс , частные селекторы повторяются в качестве открытых селекторов для использования в полном состоянии.
- Частные селекторы, используемые на слайсе.
- Открытые селекторы используются в полном состоянии.
Но это приведет к:
- Повторяющийся код
- Затопление пространства имен открытых селекторов
Есть ли лучший способ организовать селекторы?
Оригинальный пример:
Корневой редуктор и общедоступный селектор:
// reducers/index.js
import todos, * as fromTodos from './todos';
// Reducer
export default combineReducers({
todos
});
// Private selector
getVisibleTodos(state, filter) {
return fromTodos.getVisibleTodos(state.todos, filter);
}
Редуктор срезов и частный селектор:
// reducers/todos.js
// Reducer
export default (state, action) => {
switch(action.type){
case 'ADD_TODO':
// ...
break;
// Handle other actions ...
}
}
// Private selector
getVisibleTodos(state, filter) {
switch(filter) {
case 'all':
return todos;
case 'completed':
return state.filter(t => t.completed);
// Other cases ...
}
}
Использование селектора:
const mapStateToProps = (state, {params}) => ({
todos: getVisibleTodos(state, params.filter || 'all')
});