2017-05-11 2 views
-1

une carte immuable utilisant dans une application Reduximmutable.js Carte non persistance des données

Demandez ce qui suit dans mon code réducteur:

const IWT = new Map(); 
    for (const item of action.IWT) { 
     let current = IWT[item.index]; 
     if (current) { 
      current 
       .get('services') 
       .push(item.SID); 
     } else { 
      current = new IWTObject({ 
       index: item.ID, 
       stage: item.stage, 
       name: item.name, 
       ranking: item.rank, 
       services: new List([item.SID]), 
      }); 

      console.log(current, item.ID, IWT); 
      IWT.set(item.ID, current); 
      console.log(IWT); 
     } 
    } 

Pour une raison quelconque, je reçois sortie pour current, item.ID et IWT dans la première sortie console.log(), mais je reçois toujours un blanc immutable Map pour IWT dans la deuxième sortie.

Qu'est-ce que je fais mal ici?

+1

En raison de l'immutabilité :) 'set' crée une nouvelle carte parce que la carte originale est IMMUTABLE :) –

+0

Eh bien, je me sens idiot. Je suppose que la meilleure chose à faire est de construire un objet de manière itérative et ensuite définir la carte à cela. – fox

+0

Si vous avez plusieurs mutations à faire dans une boucle, jetez un oeil à la méthode 'withMutations' https://facebook.github.io/immutable-js/docs/#/Map/withMutations –

Répondre

0

Essayez const newIWT = IWT.set(item.ID, current); puis console.log que non Immutable.js est conçu pour ne pas muter et renvoie à la place une nouvelle valeur.

Je recommande également d'utiliser des méthodes immuables pour l'itération, par opposition à une boucle si vous allez utiliser des méthodes de immutable.js telles que map pour la liste ou les méthodes keySeq ou valueSeq pour un type de carte.