关于reactjs:在化简版React Redux中更新嵌套状态

Update a nested state in a reducer React Redux

我正在将redux与reactjs一起使用。这是我的减速器状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
 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"
    }
  }
}

我想更新reducer并在lastMessage之后添加一个键/值(\\'name \\':joe)。我在action.payload中具有名称(例如:joe)和id用户(例如:XSAUZHNAKZJ)的值。这是我的代码,但看来我做得不好。

1
2
3
4
5
6
7
8
9
10
11
12
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;
  }
}


使用immutability helper将新对象分配给嵌套状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
  }
}