我想知道我是否完全理解了javascript中赋值和合并之间的区别。每当以下reducer更新状态时,我都会收到Encountered two children with the same key
错误
function updateKeyframes(state, action) {
const { keyframeIds, props } = action.payload;
const newKeyframes = _.map(keyframeIds, function(id) {
return _.merge(state.keyframes[id], props);
});
return Object.assign({}, state, {
keyframes: Object.assign({}, state.keyframes, newKeyframes)
});
}
但是,如果我以不同的方式计算newKeyframes,则错误消失。
const newKeyframes = keyframeIds.reduce((memo, keyframeId) =>
Object.assign({}, memo, {
[keyframeId]: Object.assign({}, state.keyframes[keyframeId], props)
}), {});
为什么呢?这是怎么回事?
答案 0 :(得分:1)
在您的第一个示例中,newKeyframes
是一个数组。在第二个示例中,newKeyFrames
是一个对象。那时有一个明显的区别:
Object.assign({}, state.keyframes, newKeyframes)
如果newKeyFrames
是一个数组,那么密钥替换可能会按预期进行。