2016-10-21 3 views
2

다음은 어떻게 만 돌아 오는 내 감속기의 하나 개의 값을 업데이트 할 내 코드Reduce에서 내 감속기의 값 하나만 업데이트하려면 어떻게합니까?

function customMsg(state, action) { 
state = state || { 
    person: { 
     isFetching: false, 
     didInvalidate: false, 
     name: "", 
     height: "", 
    } 
}; 

switch(action.type) { 

    case ACTION_TYPES.PERSON.FETCH_PERSOn_CONTENT_SUCCESS: 
     return $.extend({}, state, { 
      person.name: action.result.name 
     }); 

    default: 
     return state; 
} 
} 

입니까? 위의 예는 person 개체의 이름 만 업데이트하려는 예제입니다. 어떻게 할 수 있습니까?

답변

5

jQuery를 확장, 복제를 만들고 사람 이름 설정 사용 : 깊이 당신이 lodash cloneDeep()를 사용할 수있는 개체를 복제, 그렇지 않으면

var newState = $.extend({}, state); 
newState.person.name = action.result.name; 
return newState; 

합니다.

또 다른 방법은 immutableJS을 사용하여 앱 상태를 불변으로 설정하는 것입니다. 그것은 훨씬 더 많은 "변경 가능한"증명이며 변경 불가능한 변수에 중첩 된 값을 설정하는 기능을 제공합니다. updateIn 참조 :

return state.updateIn(['person', 'name'],() => action.result.name); 

사용해보기!

관련 문제