我有点困惑是在 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 适用于大多数浏览器(无需编译)
  • 对象的 ... 不是标准化的
  • ... 保护你不会意外地改变对象
  • ... 将在浏览器中 polyfill Object.assign
  • ... 需要更少的代码来表达相同的想法
  • 关于reactjs - 在 Redux 中使用 Spread 运算符或 Object.assign 的权利是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36193852/

    10-12 02:40