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; } } |
使用
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; } } |