在Redux中使用Spread运算符或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规范的一部分,只是一个建议。唯一的选择是用Babel(或类似的东西)编译它。

以下是从Babel的REPL编译的代码。

var _extends = Object.assign || /* a polyfill */;
return _extends({}, todo, {
  completed: !todo.completed
});

正如您所看到的,它只是Object.assign({})之上的语法糖。

没有权限选项。

在我看来,这些是重要的区别。

  • Object.assign适用于大多数浏览器(无需编译)
  • 对象的...未标准化
  • ...保护您不意外更改对象
  • ...将在没有它的浏览器中polyfill Object.assign
  • ...需要更少的代码来表达相同的想法

相关内容

  • 没有找到相关文章

最新更新