Redux: лучший способ для частных / публичных селекторов - PullRequest
0 голосов
/ 13 ноября 2018

Как предполагает этот курс , частные селекторы повторяются в качестве открытых селекторов для использования в полном состоянии.

  • Частные селекторы, используемые на слайсе.
  • Открытые селекторы используются в полном состоянии.

Но это приведет к:

  • Повторяющийся код
  • Затопление пространства имен открытых селекторов

Есть ли лучший способ организовать селекторы?

Оригинальный пример:

Корневой редуктор и общедоступный селектор:

// 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')
});
...