Javascript 使用Object.assign返回新的未变异状态&;洛达斯合并函数?
只是遇到了一些我不明白的事情。它是关于redux state+lodash\uux.merge函数的 这不起作用:Javascript 使用Object.assign返回新的未变异状态&;洛达斯合并函数?,javascript,redux,react-redux,lodash,mutation,Javascript,Redux,React Redux,Lodash,Mutation,只是遇到了一些我不明白的事情。它是关于redux state+lodash\uux.merge函数的 这不起作用: const newState = Object.assign({}, state); const merge = { active: { userId: nextUserId } }; return _.merge(newState, merge); const newState = Object.assign({}, state
const newState = Object.assign({}, state);
const merge = {
active: {
userId: nextUserId
}
};
return _.merge(newState, merge);
const newState = Object.assign({}, state);
const merge = {
active: {
userId: nextUserId
}
};
return _.merge({}, newState, merge);
而这确实有效:
const newState = Object.assign({}, state);
const merge = {
active: {
userId: nextUserId
}
};
return _.merge(newState, merge);
const newState = Object.assign({}, state);
const merge = {
active: {
userId: nextUserId
}
};
return _.merge({}, newState, merge);
区别在于最后一行:
return _.merge(newState, merge);
vs:
我似乎不明白为什么这里会有不同<代码>.\uMERGE是可变的,所以最好是“突变”一个新创建的对象,而不是状态本身-而是在第一种情况下,我用
对象创建一个新对象。分配
并将其作为新状态返回。我从未有过变异的状态。还是我?这里的问题是什么?对象。赋值创建一个浅层副本,因此任何比级别1更深的属性仍然引用原始状态
这不起作用:
newState
是将递归复制merge
对象属性的目标对象,由于newState
仍然引用原始状态,因此任何变异最终都会变异原始状态
鉴于这确实有效:
{}
是目标对象,其中将递归复制newState
和merge
对象中的属性,因为{}
不涉及原始状态,因此任何突变最终都不会影响原始状态uppps阅读本文,我觉得这可能与制作了newState
const
有关……它与newState是const无关。将某个对象声明为常量不会对对象的行为方式产生任何影响,除非您尝试重新分配它,否则会抛出一个错误。顺便说一句,你仍然可以变异常量。
return _.merge({}, newState, merge);