Maison > interface Web > js tutoriel > Comment remplacer votre état Zustand.

Comment remplacer votre état Zustand.

DDD
Libérer: 2024-09-19 06:31:03
original
1109 Les gens l'ont consulté

Dans cet article, nous explorerons comment Zustand permet le remplacement d'état avec la fonction setState, en nous concentrant sur une fonctionnalité intéressante : remplacer l'état sans fusionner. Nous vous expliquerons comment l'utiliser avec un cas de test simple.

How to override your Zustand state.

Comprendre la fusion d'états et le remplacement d'états

Avant de regarder le code, il est important de comprendre la différence entre l'état fusion et remplacement.

  • Fusion de l'état : Par défaut, lorsque vous mettez à jour l'état dans Zustand (ou React), il fusionne le nouvel état avec l'état existant. Seuls les champs mis à jour sont modifiés, tandis que le reste de l'état reste intact.

  • État de remplacement : En revanche, le remplacement de l'état remplace l'état entier par un nouvel objet, en supprimant tous les champs qui étaient présents dans l'état précédent mais n'en font pas partie du nouvel État.

Quand remplacer l'état

Il existe des situations où le remplacement de l'ensemble de l'état est nécessaire, par exemple :

  • Réinitialisation de l'état après la soumission d'un formulaire.

  • Remplacement complet de l'état lors du chargement d'un ensemble de données différent.

Cas de test pour remplacer l'état de Zustand

Voici un cas de test simple issu de la base de code de Zustand qui montre comment remplacer l'état à l'aide de la fonction setState :

it('can set the store without merging', () => {
  const { setState, getState } = create<{ a: number } | { b: number }>(
    (_set) => ({
      a: 1,
    }),
  )

  // Should override the state instead of merging.
  setState({ b: 2 }, true)
  expect(getState()).toEqual({ b: 2 })
})
Copier après la connexion

Décomposer le test

1. Création du magasin Tout d'abord, un magasin Zustand est créé avec un état initial :

const { setState, getState } = create<{ a: number } | { b: number }>(
    (_set) => ({
      a: 1,
    }),
  )
Copier après la connexion

L'état initial est un objet avec une seule propriété définie sur 1. La fonction create renvoie deux méthodes essentielles :

  • setState : Cette méthode est utilisée pour mettre à jour l'état du magasin.

  • getState : Cette méthode récupère l'état actuel du magasin.

2. Remplacer l'état L'opération clé ici est de remplacer l'état actuel, { a: 1 }, par un état complètement nouveau :

setState({ b: 2 }, true)
Copier après la connexion
  • En passant le vrai drapeau comme deuxième argument, Zustand sait qu'il doit remplacer l'état, plutôt que de fusionner le nouvel objet { b: 2 } avec celui existant. Cela remplace complètement l'état précédent, donc { a: 1 } est supprimé et le nouvel état devient { b: 2 }.

3. Validation du remplacement de l'État Enfin, le test garantit que l'État a été entièrement remplacé :

expect(getState()).toEqual({ b: 2 })
Copier après la connexion

On s'attend à ce qu'après avoir appelé setState({ b: 2 }, true), l'état du magasin ne contienne que { b: 2 } et ne contienne plus { a: 1 }.

Comment Zustand remplace l'état

L'image ci-dessous provient du code source de Zustand qui définit l'état.

How to override your Zustand state.

Comme vous pouvez le voir, si l'indicateur de remplacement existe, nextState devient le nouvel état.

(replace ?? (typeof nextState !== 'object' || nextState === null))
Copier après la connexion

C'est une manière intelligente, si replace est faux, ce qui est le cas par défaut, (typeof nextState !== 'object' || nextState === null)) la condition est vérifiée.

Conclusion

Zustand offre un moyen simple de gérer l'état dans React, et la possibilité de remplacer complètement l'état à l'aide de setState avec l'indicateur de remplacement offre une flexibilité supplémentaire. Que vous souhaitiez réinitialiser un formulaire, charger de nouvelles données ou effacer d'anciennes valeurs, cette fonctionnalité vous permet de contrôler entièrement la façon dont l'état est géré et mis à jour dans votre application.

À propos de nous :

Chez Think Throo, nous avons pour mission d'enseigner les concepts architecturaux avancés de base de code utilisés dans les projets open source.

10x vos compétences en codage en pratiquant des concepts architecturaux avancés dans Next.js/React, apprenez les meilleures pratiques et construisez des projets de niveau production.

Nous sommes open source — https://github.com/thinkthroo/thinkthroo (Donnez-nous une étoile !)

Développez les compétences de votre équipe avec nos cours avancés basés sur l'architecture de base de code. Contactez-nous à hello@thinkthroo.com pour en savoir plus !

Références :

  1. https://github.com/pmndrs/zustand/blob/v4.5.5/tests/basic.test.tsx#L471C13-L471C50

  2. https://github.com/pmndrs/zustand/tree/v4.5.5?tab=readme-ov-file#overwriting-state

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal