Maison > interface Web > js tutoriel > le corps du texte

Explication du scénario de test createWithEqualityFn dans Zustand.

DDD
Libérer: 2024-09-14 06:26:02
original
460 Les gens l'ont consulté

Dans cet article, nous comprendrons le cas de test écrit pour valider le createWithEqualityFn qui empêche le nouveau rendu en fonction d'une condition et d'une fonction d'égalité que vous pouvez transmettre.

Le code ci-dessous est extrait de basic.test.ts

it('uses the store with a selector and equality checker', async () => {
  const useBoundStore = createWithEqualityFn(
    () => ({ item: { value: 0 } }),
    Object.is,
  )
  const { setState } = useBoundStore
  let renderCount = 0

  function Component() {
    // Prevent re-render if new value === 1.
    const item = useBoundStore(
      (s) => s.item,
      (_, newItem) => newItem.value === 1,
    )
    return (
      <div>
        renderCount: {++renderCount}, value: {item.value}
      </div>
    )
  }

  const { findByText } = render(
    <>
      <Component />
    </>,
  )

  await findByText('renderCount: 1, value: 0')

  // This will not cause a re-render.
  act(() => setState({ item: { value: 1 } }))
  await findByText('renderCount: 1, value: 0')

  // This will cause a re-render.
  act(() => setState({ item: { value: 2 } }))
  await findByText('renderCount: 2, value: 2')
})
Copier après la connexion

Zustand utilise Vitest pour ses besoins de tests. Passons en revue l'extrait de code ci-dessus.

Initialiser createWithEqualityFn

const useBoundStore = createWithEqualityFn(
    () => ({ item: { value: 0 } }),
    Object.is,
  )
Copier après la connexion

createWithEqualityFn est initialisé avec l'état () => ({ item : { value : 0 } }) et la fonction d'égalité est Object.is

createWithEqualityFn test case in Zustand explained.

createWithEqualityFn accepte deux variables, createState et defaultEqualityFn.

Empêcher le nouveau rendu

// Prevent re-render if new value === 1.
    const item = useBoundStore(
      (s) => s.item,
      (_, newItem) => newItem.value === 1,
    )
Copier après la connexion

useBoundStore accepte le sélecteur et la fonction d'égalité qui sont utilisés pour empêcher le nouveau rendu en fonction de la valeur correspondante.

L'exemple ci-dessus dans basic.test est utilisé pour empêcher le nouveau rendu lorsque la valeur est 1.

await findByText('renderCount: 1, value: 0')

// This will not cause a re-render.
act(() => setState({ item: { value: 1 } }))
await findByText('renderCount: 1, value: 0')

// This will cause a re-render.
act(() => setState({ item: { value: 2 } }))
await findByText('renderCount: 2, value: 2')
Copier après la connexion

Ces assertions confirment que la mise à jour de l'état ne provoque aucun nouveau rendu.

À propos de nous :

Chez Think Throo, nous avons pour mission d'enseigner les meilleures pratiques inspirées des 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/main/tests/basic.test.tsx#L92

  2. https://vitest.dev/guide/

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!