...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 中,这通常是一个动作。这是特别聪明的,因为您首先创建对象,然后在数组中查找元素并创建或替换它。
在这个问题之前,我假设 ...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 ofObject.assign({}, state, { /* ... */ })
您的第一个语法缺少上下文。在您链接的代码中,它在数组文字中使用:
[...state, { /* ... */ }]
其中构造多个数组元素的spread element
整个事情确实创建了一个 数组 ,而不是像 Object.assign({}, …)
那样的对象。
展开语法不能用在对象字面量中(在ES6中,未来有草案会改变这个)。
您可能还会看到这个
[...state, Object.assign({}, obj.attribute) ]
这是从传递到数组的对象放置在状态上的新属性,在 redux 中,这通常是一个动作。这是特别聪明的,因为您首先创建对象,然后在数组中查找元素并创建或替换它。