2017-01-16 2 views
2

J'essaie d'utiliser Immutable.js. J'ai donc utilisé l'objet Map et j'ai 2 champs par ex.Immutable.js mettre à jour une valeur clé multiple dans la carte

const initialState = Map({ 
    isUserAuthorized : false, 
    pending : false 
}); 

et je veux mettre à jour les deux. Comment je peux faire ça? J'ai essayé d'utiliser une méthode de mise à jour standard comme ça:

state.update("isUserAuthorized",() => true, "pending",() => false); 

Mais ça ne marche pas. Donc, je n'ai qu'une idée - mettre à jour seulement une clé particulière et ensuite faire la même chose avec d'autres et retourner un résultat.

Mais je pense que c'est une idée pas si parfaite. Peut-être que d'autres variantes normales existent? Merci pour toute aide!

P.S. Je trouve que cela peut être fait par l'intermédiaire mis et withMutations comme:

initialState.withMutations(map => { 
      map.set("isUserAuthorized", true).set("pending", false); 
     }) 

Mais est-il vraiment si difficile de mettre à jour plusieurs valeurs dans la carte?

Répondre

3

Vous pouvez utiliser .set():

const initialState = Map({ 
    isUserAuthorized : false, 
    pending : false 
}); 

initialState = initialState.set('isUserAuthorized', true); 
initialState = initialState.set('pending', false); 

Si vous ne voulez pas le répéter. Vous pouvez créer une fonction pour passer plusieurs paramètres.

Une autre façon est avec .merge():

const newState = initialState.merge({ 
    isUserAuthorized: true, 
    pending: false 
}); 

Ou enchaînant plusieurs jeux:

initialState = initialState.set('isUserAuthorized', true) 
    .set('pending', false) 
    .set('key3', 'value3'); 
+0

Salut Albert! Merci pour votre réponse. Mais, en fait, est-il possible de le faire en une seule ligne? comme ensemble ('isUserAuthorized', 1) .set ('pending', z) – Velidan

+0

Merci beaucoup ami! – Velidan