Redux:无法读取未定义的属性“id”

时间:2017-01-30 09:28:31

标签: react-redux

除非点击了可点击列表项,否则下面的代码按预期工作。因此,当我们添加项目时,映射的ID是正常的,而当单击undefined时,<li>let nextId = 0; export default React.createClass({ addItem(){ let text = ReactDOM.findDOMNode(this.refs.doos).value; store.dispatch({ type: 'ADD_TODO', text, id: nextId++ }) ReactDOM.findDOMNode(this.refs.doos).value = ''; }, render(){ return <div> <p>Toddos!</p> <input ref="doos" type="text"/> <button onClick={this.addItem}>Add Item</button> <ul> {this.props.todos.map(todo => <li key={todo.id} // Can not read property when clicked! onClick={() => { store.dispatch({ type: 'TOGGLE_TODO', id: todo.id }); }} style={{ textDecoration: todo.completed ? 'line-through' : 'none', cursor: 'pointer' }}> {todo.text} </li> )} </ul> </div> } }); 。 请问,这段非常基本的代码有什么问题?

function va_custom_excerpt_length() {
    return 20;
}
add_filter( 'excerpt_length', 'va_custom_excerpt_length', 999 );

1 个答案:

答案 0 :(得分:0)

它可能与你的减速器没有返回状态有关。在映射到所有待办事项的reducer中,检查它是否返回每个待办事项的状态。

可能存在的问题是您在map函数中使用花括号作为todosReducer。但是,在ES6中使用大括号意味着您应该明确地返回值。省略大括号会自动返回值。

在你的todosReducer:

  case 'TOGGLE_TODO':

  return state.map(todo => { 
    todoReducer(todo, action) // You should use return here
  });

或者:

  case 'TOGGLE_TODO':

  return state.map(todo => 
    todoReducer(todo, action) // Omitted curly brackets
  );