2017-03-16 165 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; 
    } 
} 
相关问题