我正在使用todos-with-undo示例编写我的应用程序,但我找不到从此示例中删除可见性功能的方法。以下是示例https://github.com/rackt/redux/tree/master/examples/todos-with-undo的链接:
主要问题出在App.js文件中:
<TodoList todos={visibleTodos} onTodoClick={id => dispatch(completeTodo(id))} />
我正在尝试用this.props.todos替换visibleTodos,但它不会以这种方式工作。如何摆脱这个visibleTodos属性?
答案 0 :(得分:0)
待办事项尚未被定义为道具,它们仅在州内。这就是您无法通过this.props.todos
访问它们的原因看看这个line of code,它将状态映射到props:
function select(state) {
return {
...
visibleTodos: selectTodos(state.todos.present, state.visibilityFilter),
...
}
}
在这里你可以看到,visibleTodos只是一个过滤的子集。如果要访问渲染方法中的所有待办事项,可以执行以下两项操作:
删除对过滤todos(selectTodos)的方法的调用:
function select(state) {
return {
...
visibleTodos: state.todos.present,
...
}
}
或者定义你自己的新道具,然后通过this.props.todos
访问App.propTypes = {
...
todos: PropTypes.arrayOf(PropTypes.shape({
text: PropTypes.string.isRequired,
completed: PropTypes.bool.isRequired
}).isRequired).isRequired
}
function select(state) {
return {
...
todos: state.todos.present
}
}