2017-03-16 12 views
2

reactjs와 함께 redux를 사용하고 있습니다. 단지 lastMessage 후 : 내가 감속기를 업데이트하고 키/값 (조 '이름')를 추가 할감속기에서 중첩 된 상태 업데이트하기 React Redux

{ 
XSAUZHNAKZJ : //id User 
    { 
    AZRAERAZEAZ : //id Conversation - always one object 
    { 
    timestamp : 123123123, 
    lastMessage : "hello" 
    } 
    }, 
BLZEJARNAELKR : //id User 
    { 
    AANALZKJAZ : //id Conversation - always one object 
    { 
    timestamp : 123123123, 
    lastMessage : "hello" 
    } 
    } 
} 

: 여기 내 감속기 상태입니다. 내 action.payload에 name (예 : joe) 값과 id User (예 : XSAUZHNAKZJ) 값이 있습니다. 여기에 내 코드가 있지만, 내가 제대로하지 않는 것 같습니다. immutability helper

export default function(state={},action){ 
    switch(action.type){ 
    case 'GET_USER_INFO': 
     var tempState = Object.assign({}, state); 
     var conversation = tempState[action.payload.key]; 
     var conversationDetail = conversation[Object.keys(conversation)[0]]; 
     conversationDetail['name']=action.payload.val().name; 
     return tempState; 
    default: 
     return state; 
    } 
} 
+0

그래서 작동하고이 그것을 할 올바른 방법 인 경우에 당신이 요구하는지? – MrCode

+0

그것은 작동하지 않지만, Shubham Khatri의 대답은 그 일을합니다! – Zoomzoom

+0

나머지는 괜찮아 보이기 때문에 문제가 발생한 것은'action.payload.val(). name'처럼 보입니다. – MrCode

답변

2

만들기 사용은 중첩 된 상태로 새로운 객체를 할당하는

import update from 'immutability-helper'; 

export default function(state={},action){ 
    switch(action.type){ 
    case 'GET_USER_INFO': 
     return update(state, { 
      [action.payload.key]: { 
        [Object.keys(state[action.payload.key])[0]]: { 
          $merge: {name: action.payload.name} 
        } 
      } 
     }) 
    default: 
     return state; 
    } 
}