2017-08-07 2 views
0

Lors de la soumission d'un formulaire avec des valeurs mises à jour, je dois mettre à jour l'état pour refléter ces changements, mais je suis nouveau à Immutable.js et je ne sais pas comment faire cela.Puis-je mettre à jour divers éléments dans une liste Immutable dans une application React/Redux?

Est-il possible de passer une fonction en tant que 2ème argument pour définir ou mettre à jour pour mettre à jour les valeurs en fonction de certains critères.

J'ai une fonction qui reçoit un état et un tableau d'objets appelés valeurs. Les données des valeurs ressemble à ceci:

[ 
    { 
    key: 'name', 
    value: 'fred' 
    }, 
    { 
    key: 'height', 
    value: '201' 
    }, 
    { 
    key: 'weight', 
    value: '78' 
    } 
] 

Je dois carte sur ces données, et la liste d'état, et mettre à jour les valeurs correspondantes dans la liste d'état avec le tableau de valeurs.

Comment puis-je faire cela. Je l'ai mis en place une fonction qui le réducteur appelle à mettre à jour l'état avec les nouvelles données, mais pas sûr exactement comment obtenir le résultat final

function updateValue(state, values = []) { 
    const items = state.get('items').map((i) => { 
    const key = i.get('key'); 

    values.map(v => { 
     if (v.key === key) { 
     return state.update('value', v.value); 
     } 
    }) 
    }); 

    return state.update('items', /* Can I use a function here to replace the code above.. to update all of the items in the state List that correspond to the items in the measurements array (which have new values) */); 
} 

Merci beaucoup.

Mise à jour Essayé ce qui suit, mais obtenir l'erreur: Expected [K, V] tuple: i

function updateValue(state, values = []) { 
    const items = state.get('items').map((i) => { 
    const key = i.get('key'); 

    values.map(v => { 
     if (v.key === key) { 
     return state.update('value', v.value); 
     } 
    }) 
    }); 

    return state.update('items', items); 
} 

Plus de détails sur l'erreur de Immuable:

function validateEntry(entry) { 
    if (entry !== Object(entry)) { 
     throw new TypeError('Expected [K, V] tuple: ' + entry); 
    } 
    } 
+0

Vous obtenez cette erreur car lorsque vous 'map' sur une instance de' Map', la fonction mapper prend une paire valeur/clé, donc quelque chose comme 'map ((k, v) => ....)' –

Répondre

0

Vous pouvez utiliser 'fusion' pour revenir nouvel objet :

retour état.merge ({ articles: v alues, });

+0

Merci Alexander, essayé cette question et mise à jour avec le code que j'ai utilisé. Obtenir une erreur –