2017-01-23 67 views
0

我做了basic redux todolist tutorial和它的工作,但我想获得通过做一个小的变化就知道的代码。终极版 - 传递减速的动作似乎有不确定的ID

我改变:

动作/ index.js

let nextTodoId = 0 
export const addTodo = (text) => { 
    return { 
    type: 'ADD_TODO', 
    id: nextTodoId++, 
    text 
    } 
} 

这样:

let nextTodoId = 0 
export const addTodo = (text) => { 
    return { 
     type: 'ADD_TODO', 
     payload: { 
     id: nextTodoId++, 
     text: text 
     } 
    } 
} 

而且我得到了增加一个待办事项与工作,但一个奇怪的副作用发生在toggleTodo - 没有控制台的错误,但单击待办事项列表项应该是之间完成(在视觉上有ST切换它穿过文本)并没有完成。点击列表项目现在不起作用。

我挣扎通过这个减速器具有定义id的动作。

减速/ todos.js:

enter image description here

这是调用toggleTodo(id)减速器(寻找箭头指向,并说 “这里”),代码:

集装箱/ visibleTodoList.js:

import { connect } from 'react-redux' 
import { toggleTodo } from '../actions' 
import TodoList from '../components/TodoList' 

const getVisibleTodos = (todos, filter) => { 
    switch (filter) { 
    case 'SHOW_ALL': 
     return todos 
    case 'SHOW_COMPLETED': 
     return todos.filter(t => t.completed) 
    case 'SHOW_ACTIVE': 
     return todos.filter(t => !t.completed) 
    } 
} 

const mapStateToProps = (state) => { 
    return { 
    todos: getVisibleTodos(state.todos, state.visibilityFilter) 
    } 
} 

const mapDispatchToProps = (dispatch) => { 
    return { 
    onTodoClick: (id) => { 
     dispatch(toggleTodo(id)) <-------------HERE 
    } 
    } 
} 

const VisibleTodoList = connect(
    mapStateToProps, 
    mapDispatchToProps 
)(TodoList) 

export default VisibleTodoList 

所以ID是onTodoClick到来。

组件/ TodoList.js:

enter image description here

所以我有暂停和看到的onTodoClick()值:

enter image description here

凡在original code是它设置onTodoClick.id所以我可以再说一遍,以获得onTodoClick.id来定义(因此厚福导致点击todo项目成功切换)。

回答

1

您正在寻找state.id !== action.id,但你把它作为action.payload.id做到以下几点:

case 'TOGGLE_TODO': 
if (state.id !== action.payload.id) { 
    return state 
} 
+0

是的,这是因为id属性搬迁 – bonesbrigade