2017-03-16 128 views
2

我正在使用reax和reactjs。這裏是我的減速狀態:在還原器中更新嵌套狀態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" 
    } 
    } 
} 

我想更新的減速,並添加一個鍵/值(「名」:喬)剛剛lastMessage之後。我的action.payload中有name(例如:joe)和id User(例如:XSAUZHNAKZJ)的值。這是我的代碼,但似乎我做得不對。

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

利用immutability helper新對象分配到嵌套狀態

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; 
    } 
} 
相關問題