在 Redux 中使用 Spread 运算符或 Object.assign 的权利是啥?

Posted

技术标签:

【中文标题】在 Redux 中使用 Spread 运算符或 Object.assign 的权利是啥?【英文标题】:What is right to use Spread operator or Object.assign in Redux?在 Redux 中使用 Spread 运算符或 Object.assign 的权利是什么? 【发布时间】:2016-07-11 16:04:13 【问题描述】:

我有一点困惑是在 reducer 函数中使用 Spread 运算符还是 Object.assign 来将更改应用到目标对象。

const toggleTodo = (todo) => 
  return Object.assign(, todo, 
    completed: !todo.completed
   );
 ;

那么上面提到的代码是使用 Object.assign 方法,下面的代码是使用扩展运算符

const toggleTodo = (todo) => 
return 
  ...todo,
  completed: !todo.completed
  ;
;

这两种方法哪个合适

【问题讨论】:

“适当”一词是什么意思?如果它有效 - 它是合适的,如果它不起作用 - 它不是。 两者都工作正常,但我想知道哪种方法是正确的实现方法 没有绝对“正确”的方法可以做任何事情。 谢谢@zerkms 【参考方案1】:

对象扩展运算符 (...) 在浏览器中不起作用,因为它还不是任何 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 ... 需要更少的代码来表达相同的想法

【讨论】:

stefan.magnuson.co/articles/frontend/… redux.js.org/docs/recipes/UsingObjectSpreadOperator.html

以上是关于在 Redux 中使用 Spread 运算符或 Object.assign 的权利是啥?的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用spread运算符复制对象或数组

ES6扩展/收集运算符--spread/rest

由 Rest参数 和 Spread扩展运算符想到的...

如何使用 props 和 spread 运算符从子组件中操作状态?

javascript React:使用spread(... spread)运算符

使用 Spread 运算符时出现 TypeScript 错误?