...state, { } 和 Object.assign({ }, state, { }) 之间的区别

Difference between ...state, { } and Object.assign({ }, state, { })

在这个问题之前,我假设 ...state, { /* ... */ } 等同于 Object.assign({}, state, { /* ... */ }) 的 es6 语法,但我发现越来越多的回购协议在同一个文件中使用这两个,因此现在有点困惑并认为他们服务于不同的目的。我试图在网上查找有关此的信息,但无法找到任何关于它们有何不同的明确解释。

示例:https://github.com/choonkending/react-webpack-node/blob/master/app/reducers/topic.js

I assumed that ...state, { /* ... */ } is equivalent es6 syntax of Object.assign({}, state, { /* ... */ })

您的第一个语法缺少上下文。在您链接的代码中,它在数组文字中使用:

[...state, { /* ... */ }]

其中构造多个数组元素的spread element

整个事情确实创建了一个 数组 ,而不是像 Object.assign({}, …) 那样的对象。

展开语法不能用在对象字面量中(在ES6中,未来有草案会改变这个)。

您可能还会看到这个

[...state, Object.assign({}, obj.attribute) ]

这是从传递到数组的对象放置在状态上的新属性,在 redux 中,这通常是一个动作。这是特别聪明的,因为您首先创建对象,然后在数组中查找元素并创建或替换它。