React 中的深度复制

新手上路,请多包涵

在减速器中,我们总是使用 Object.assign({},state,newState) 来保存状态。但是 assign() 不支持deepcopy,因为该方法只复制多级对象的引用。这是我在程序中的代码。

 const menuListState={
	menuList: {},
	menuListLoading:false
}
function getMenuList(state=menuListState,action=defaultAction){
	switch(action.type){
		//menuList begin
		case actions.GET_MENULIST_SUCCESS:
		    return Object.assign({},state,{
			    menuList:action.data,
			    menuListLoading:false
		    });

		default:
			return state;
	}
}

属性 menuList 是一个多级对象。当 action.data 改变时, state.menuList 会在方法 assign() 工作之前立即改变吗?

原文由 ThiagoSun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

您可以使用 JSON.stringify 将对象字符串化,并使用 JSON.parse 将结果字符串解析为对象,您将获得与要深度复制的对象相同的新对象。

例子:

 let copiedObject = JSON.parse(JSON.stringify(originalObject))

原文由 passion 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可能对 cloneDeep form lodash感兴趣,使用方法如下:

 var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false

这是该方法的 npm 包。

原文由 Jemar Jones 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题