J'ai un problème où le re-rendu de l'état provoque des problèmes d'interface utilisateur et il a été suggéré de ne mettre à jour qu'une valeur spécifique dans mon réducteur pour réduire la quantité de re-rendu sur une page.
c'est un exemple de mon état
{
name: "some name",
subtitle: "some subtitle",
contents: [
{title: "some title", text: "some text"},
{title: "some other title", text: "some other text"}
]
}
et je suis en train de le mettre à jour comme ça
case 'SOME_ACTION':
return { ...state, contents: action.payload }
où action.payload
est un tableau entier contenant de nouvelles valeurs. Mais maintenant, j'ai juste besoin de mettre à jour le texte du deuxième élément dans le tableau de contenu, et quelque chose comme ça ne fonctionne pas
case 'SOME_ACTION':
return { ...state, contents[1].text: action.payload }
où action.payload
est maintenant un texte dont j'ai besoin pour la mise à jour.
javascript
reactjs
redux
Ilja
la source
la source
kolodny/immutability-helper
, il est maintenantyarn add immutability-helper
etimport update from 'immutability-helper';
Vous pouvez utiliser
map
. Voici un exemple d'implémentation:la source
Vous n'êtes pas obligé de tout faire en une seule ligne:
la source
Très tard à la fête mais voici une solution générique qui fonctionne avec chaque valeur d'index.
Vous créez et étendez une nouvelle matrice de l'ancienne matrice à celle que
index
vous souhaitez modifier.Ajoutez les données souhaitées.
Créez et diffusez un nouveau tableau à partir de celui que
index
vous vouliez modifier jusqu'à la fin du tableauMettre à jour:
J'ai fait un petit module pour simplifier le code, il vous suffit donc d'appeler une fonction:
Pour plus d'exemples, jetez un œil au référentiel
signature de fonction:
la source
Je crois que lorsque vous avez besoin de ce type d'opérations sur votre état Redux, l'opérateur de diffusion est votre ami et ce principe s'applique à tous les enfants.
Imaginons que c'est votre état:
Et vous voulez ajouter 3 points à Serdaigle
En utilisant l'opérateur de diffusion, vous ne pouvez mettre à jour que le nouvel état en laissant tout le reste intact.
Exemple tiré de cet article étonnant , vous pouvez trouver presque toutes les options possibles avec d'excellents exemples.
la source
Dans mon cas, j'ai fait quelque chose comme ça, basé sur la réponse de Luis:
la source
Voici comment je l'ai fait pour l'un de mes projets:
la source
J'ai peur que l'utilisation de la
map()
méthode d'un tableau puisse être coûteuse car tout le tableau doit être itéré. Au lieu de cela, je combine un nouveau tableau composé de trois parties:Voici l'exemple que j'ai utilisé dans mon code (NgRx, pourtant le machanisme est le même pour les autres implémentations Redux):
la source