【发布时间】:2020-04-01 02:59:22
【问题描述】:
我最近学习了 React 和 Redux,就在我以为我掌握了它的窍门时,我就被挂断了。
在我的减速器中,我的印象是扩展运算符应该在不同的内存位置创建对象的新实例。但是,使用 === 比较对象返回 true,我认为这意味着对象是相同的实例。
const initState = {
loadcases: {
1: {
isActive: false,
profile: 'UB'
},
2: {
isActive: true,
profile: 'PFC'
}
}
}
const designInput = (state=initState, action={}) => {
let newState = {...state}; //clone design input state
console.log(newState.loadcases === state.loadcases)
// Prints: TRUE ---- WHYYYYYYY????????????
// goes on to modify newState before returning it.
}
redux 记录器显示我以前的状态已经等于新状态,这让我认为这里直接干扰了存储。我已经阅读了一些 redux 文档和其他帖子,这些帖子让我相信我已经正确设置了其他所有内容。
我们也非常感谢任何能就这个问题向我提供更多教育的资源。
更新:
Jayce's answer 正是发生的事情。
SO post 概述了适合深度克隆的方法。对我来说,我可能想要存储日期和其他数据,所以我选择使用lodash cloneDeep method。
所以现在:console.log(cloneDeep(state) === state.loadcases); // false
【问题讨论】:
-
这能回答你的问题吗? How to deep merge instead of shallow merge?