2016-08-31 250 views
2

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

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

 
\t \t default: 
 
\t \t \t return state; 
 
\t } 
 
}

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

回答

2

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

什么是当时的选票?

+0

我听说,这其实是非常快,因为它本身 – user3413723

+0

实施虽然答案是不是有些原生React过程,这个过程一直是像Angular JS 1类似的东西被接受的答案(由于性能和简洁)。 Upvoted –

+0

小心使用此方法双向转移日期的问题。 –

0

知道action.data是引用类型(对象,数组,...),state.menuList将立即当你改变action.data,因为它们引用相同的值发生变化。这只是Javascript的一个正常功能。