在 Redux 中使用 Spread 运算符或 Object.assign 什么是正确的?
What is right to use Spread operator or Object.assign in Redux?
我有点困惑是在 reducer 函数中使用 Spread 运算符还是 Object.assign 来将更改应用到目标对象。
const toggleTodo = (todo) => {
return Object.assign({}, todo, {
completed: !todo.completed
});
};
然后上面提到的代码使用了Object.assign方法,下面的代码使用了扩展运算符
const toggleTodo = (todo) => {
return {
...todo,
completed: !todo.completed
};
};
这两种方法哪个合适
对象展开运算符 (...
) 在浏览器中不起作用,因为它还不是任何 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
...
需要更少的代码来表达相同的想法
我有点困惑是在 reducer 函数中使用 Spread 运算符还是 Object.assign 来将更改应用到目标对象。
const toggleTodo = (todo) => {
return Object.assign({}, todo, {
completed: !todo.completed
});
};
然后上面提到的代码使用了Object.assign方法,下面的代码使用了扩展运算符
const toggleTodo = (todo) => {
return {
...todo,
completed: !todo.completed
};
};
这两种方法哪个合适
对象展开运算符 (...
) 在浏览器中不起作用,因为它还不是任何 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...
需要更少的代码来表达相同的想法