有人可以解释以下说法吗?
return state.map(todo =>
(todo.id === action.id)
? {...todo, completed: !todo.completed}
: todo
)
更具体地说,这行
{...待办事项,已完成:!todo.completed}
为什么三元运算的真实部分有两个参数?
什么是?
...
答案 0 :(得分:4)
...todo
是传播语法,这意味着completed: !todo.completed
属性将与以前的属性一起添加到现有的todo对象中。使用它,您不必手动复制现有属性。
在扩展“待办事项”对象中对其进行处理。
另外(todo.id === action.id)
正在检查两个对象中的id
是否相同,然后添加completed: !todo.completed
属性,否则将旧对象保持原样。
请查看此参考指南:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
答案 1 :(得分:2)
{
...todo,
completed: !todo.completed
}
只是复制todo
,但具有新的completed
属性。在这种情况下,它等效于todo
的completed属性的倒数。这是一个普通的JS对象。