"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Se explica el caso de prueba createWithEqualityFn en Zustand.

Se explica el caso de prueba createWithEqualityFn en Zustand.

Publicado el 2024-10-31
Navegar:374

En este artículo, comprenderemos el caso de prueba escrito para validar createWithEqualityFn que impide volver a renderizar en función de una condición y una función de igualdad que puede aprobar.

El siguiente código se selecciona 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 (
      
renderCount: { renderCount}, value: {item.value}
) } const { findByText } = render( >, ) 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') })

Zustand utiliza Vitest para sus necesidades de prueba. Repasemos el fragmento de código anterior.

Inicializar createWithEqualityFn

const useBoundStore = createWithEqualityFn(
    () => ({ item: { value: 0 } }),
    Object.is,
  )

createWithEqualityFn se inicializa con el estado () => ({ item: { value: 0 } }) y la función de igualdad es Object.is

createWithEqualityFn test case in Zustand explained.

createWithEqualityFn acepta dos variables, createState y defaultEqualityFn.

Evitar que se vuelva a renderizar

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

useBoundStore acepta el selector y la función de igualdad que se utiliza para evitar que se vuelva a representar en función del valor coincidente.

El ejemplo anterior en basic.test se utiliza para evitar que se vuelva a renderizar cuando el valor es 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')

Estas afirmaciones validan que la actualización del estado no provoca ninguna repetición.

Sobre nosotros:

En Think Throo, tenemos la misión de enseñar las mejores prácticas inspiradas en proyectos de código abierto.

10 veces tus habilidades de codificación practicando conceptos arquitectónicos avanzados en Next.js/React, aprende las mejores prácticas y crea proyectos de nivel de producción.

Somos de código abierto: https://github.com/thinkthroo/thinkthroo (¡Danos una estrella!)

Mejora las habilidades de tu equipo con nuestros cursos avanzados basados ​​en arquitectura de base de código. ¡Comuníquese con nosotros en [email protected] para obtener más información!

Referencias:

  1. https://github.com/pmndrs/zustand/blob/main/tests/basic.test.tsx#L92

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

Declaración de liberación Este artículo se reproduce en: https://dev.to/thinkthroo/createwithequalityfn-test-case-in-zustand-explained-3lhl?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3