2016-08-31 176 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的一個正常功能。