我是否有点混淆是否在reducer函数中使用Spread运算符或Object.assign来将更改应用于目标对象。
const toggleTodo = (todo) => {
return Object.assign({}, todo, {
completed: !todo.completed
});
};
然后上面提到的代码使用的是Object.assign方法,下面的代码是使用扩展运算符
const toggleTodo = (todo) => {
return {
...todo,
completed: !todo.completed
};
};
这两种方法中的适当方法
答案 0 :(得分:9)
对象扩展运算符(...
)在浏览器中不起作用,因为它不是任何ES规范的一部分,只是a proposal。唯一的选择是用Babel(或类似的东西)编译它。
以下是来自Babel's REPL的编译代码。
var _extends = Object.assign || /* a polyfill */;
return _extends({}, todo, {
completed: !todo.completed
});
正如你所看到的,它仅仅是Object.assign({})
的语法糖。
没有正确的选项。
据我所知,这些是重要的差异。
Object.assign
适用于大多数浏览器(无需编译)...
未标准化...
可以防止您意外改变对象...
会在没有它的浏览器中填充Object.assign ...
需要更少的代码来表达相同的想法