2017-08-22 4 views
0

J'essaie d'ajouter une nouvelle valeur clé objet paire un par un à l'intérieur items comme indiqué ci-dessous:Comment ajouter en profondeur un nouvel objet paire de valeur clé à l'intérieur de la carte Js Immuable en redux ..?

{ 
    appElements: { 
    layers: { 
     layer_1: { 
     background: { 
      width: '100px', 
      height: '100px', 
      bgColor: '#aaaaaa', 
      bgImage: 'http:bgimage1.png' 
     }, 
     items: { 
      yrgroih9: { 
      width: '100px', 
      x: '200px' 
      }, 
      qhy0dukj: { 
      width: '100px', 
      x: '200px' 
      }, 
      '7lw2nvma': { 
      width: '100px', 
      x: '200px' 
      } 
     } 
     } 
    } 
    } 
} 

code utilisé pour ajouter un nouvel objet à l'intérieur items:

case 'ADD_OBJECT': 
    return state.setIn(["appElements","layers","layer_1","items"],{ 
    [action.objData.item_id]: { 
     "width": action.objData.width, 
     "x": action.objData.x 
    }, 
    }); 

Le premier objet d'entrée d'essayer d'ajouter à l'intérieur items fonctionne parfaitement:

yrgroih9: { 
    width: '100px', 
    x: '200px' 
} 

stocker des données de Redux disposées (de chrome Redux devtools): enter image description here

Mais en ajoutant un autre objet va supprimer la première entrée et ajoutez l'entrée en vigueur.

Également essayé updateIn fonction, son ne fonctionne pas. Comment ajouter des objets sans enlever l'ancien.

+0

Y at-il des fautes de frappe dans votre objet? 'layer_1' et' items' devraient être un tableau. Pouvez-vous mettre à jour la structure d'objet correcte? –

+0

Il n'y a pas d'index basé sur la matrice .. Seules les paires de valeurs clés d'objet et c'est la structure d'objet correct j'ai ajouté ... J'ai ajouté des objets magasin Redux comme fichier image maintenant pour mieux comprendre .. Aidez-moi .. – ArunValaven

+0

l'erreur entre, vous n'avez pas 'qhy0dukj' ou' 7lw2nvma' car ils sont ignorés. 'items' a pris' yrgroih9' comme clé, et il n'a qu'une seule clé car c'est un hash. –

Répondre

0

devrait être quelque chose comme ceci:

return state.setIn(
    ["appElements","layers","layer_1","items", action.objData.item_id], 
    fromJS({ 
     "width": action.objData.width, 
     "x": action.objData.x 
    })); 
+0

Merci .. son travail .. @thedude ... mais besoin d'ajouter fermer parenthèse ")" pour la fonction setIn dans votre réponse .. – ArunValaven