Redux Todo List示例 - todos状态如何更新取决于可见性过滤器

时间:2015-11-01 15:21:46

标签: redux

首先请耐心等待我在Redux的新事物。

我正在阅读http://rackt.org/redux/docs/basics/ExampleTodoList.html

总而言之,我已经掌握了要点,但我并不理解

todos状态如何更新取决于可见性过滤器。

我的意思是,如果我点击即SHOW_COMPLETED,

SPA仅显示已完成的待办事项:为真,但为什么?逻辑在哪里? 我没有看到任何:(

通常在正常的脚本中应该是那种

如果state.visibiltyFilter === SHOW_COMPLETED过滤状态......

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您在智能组件下查看,则在容器/ App.js的底部,您会看到:

// This is where the filtering happens
function selectTodos(todos, filter) {
  switch (filter) {
    case VisibilityFilters.SHOW_ALL:
      return todos
    case VisibilityFilters.SHOW_COMPLETED:
      return todos.filter(todo => todo.completed)
    case VisibilityFilters.SHOW_ACTIVE:
      return todos.filter(todo => !todo.completed)
  }
}

// Which props do we want to inject, given the global state?
// Note: use https://github.com/faassen/reselect for better performance.
function select(state) {
  return {
    visibleTodos: selectTodos(state.todos, state.visibilityFilter),
    visibilityFilter: state.visibilityFilter
  }
}

// Wrap the component to inject dispatch and state into it
export default connect(select)(App)

将组件连接到商店时会发生过滤。 您只需指定对于此特定组件的状态,您应该过滤从商店获得的待办事项,然后再将它们作为道具传递给您的组件,而不是存储已过滤的列表。