我的应用程序已经有各种容器对象使用的大量选择器.这些非常适合访问州的不同部分,并使重构状态更容易.
现在我想在我的一些reducer函数中使用我的选择器.问题是在reducer中,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
}
}
Run Code Online (Sandbox Code Playgroud)
您的选择器从根状态对象工作.
要伪造这个,你可以做到
return getUncompletedTodos({todos: state});
Run Code Online (Sandbox Code Playgroud)
但恕我直言,更好的想法是重用过滤功能
/* Selectors */
const getTodos = state => state.todos;
const filterCompleted = todos => todos.filter(t => !t.completed)
const getUncompletedTodos = createSelector(
[ getTodos ],
filterCompleted
);
// inside reducer
case 'REMOVE_COMPLETED_TODOS':
return filterCompleted(state);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4852 次 |
| 最近记录: |