2017-03-16 4 views
2

Ich verwende Redux mit reactjs. Hier ist mein Minderer Zustand:Aktualisieren eines verschachtelten Status in einem Reducer 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" 
    } 
    } 
} 

Ich möchte das Minderer aktualisieren und einen Schlüssel/Wert (‚name‘: joe) fügen Sie einfach nach Lastmessage. Ich habe den Wert von Name (zB Joe) und einen ID-Benutzer (zB XSAUZHNAKZJ) in meiner action.payload. Hier ist mein Code, aber es scheint, dass ich nicht richtig mache.

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

So funktioniert es und Sie fragen, ob dies der richtige Weg, es zu tun ist? – MrCode

+0

Es funktioniert nicht, aber Shubham Khatris Antwort macht den Job! – Zoomzoom

+0

Sieht so aus, als wäre es Ihr 'action.payload.val(). Name', das war das Problem, denn der Rest sieht gut aus. – MrCode

Antwort

2

Nutzen Sie immutability helper das neue Objekt in den verschachtelten Zustand zuweisen

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; 
    } 
} 
Verwandte Themen