0Pricing
React Academy · Lección

Selectores y prevención de renderizados innecesarios

Extraiga fragmentos específicos del estado mediante selectores para que los componentes solo se vuelvan a renderizar cuando sea necesario.

Selectores y prevención de renderizados innecesarios es una lección gratuita de React Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Introducción

En esta lección usará selectores de Zustand para suscribir los componentes únicamente a los fragmentos del estado que necesitan, evitando renderizaciones innecesarias cuando cambien otras partes del store.

El problema del selector predeterminado

Llamar al hook del store sin un selector devuelve el objeto completo del store. El componente vuelve a renderizarse con CADA cambio del store, incluso cuando cambia un estado no relacionado.
// Bad: re-renders on every store change
const store = useAppStore();
return <p>{store.user.name}</p>;

Usar un selector

Pase una función selectora al hook del store. El componente solo vuelve a renderizarse cuando cambia el valor devuelto por el selector.
// Good: re-renders only when user.name changes
const name = useAppStore(s => s.user.name);
return <p>{name}</p>;

Comprobación de igualdad de referencias

Zustand usa la igualdad estricta (===) de forma predeterminada. Si el selector devuelve un objeto o array nuevo en cada llamada, el componente vuelve a renderizarse aunque el contenido sea el mismo.
// Creates a new object every time — always re-renders!
const info = useStore(s => ({ id: s.id, name: s.name }));

Corregirlo con igualdad superficial

Importe `shallow` desde zustand y páselo como función de igualdad para evitar renderizaciones cuando el contenido de los objetos sea el mismo.
import { shallow } from 'zustand/shallow';

const info = useAppStore(
  s => ({ id: s.id, name: s.name }),
  shallow // compare by content, not reference
);

Seleccionar varios valores

Use el patrón de igualdad superficial para seleccionar varios valores a la vez sin provocar renderizaciones innecesarias.
const { items, loading } = useCartStore(
  s => ({ items: s.items, loading: s.loading }),
  shallow
);

Referencias estables de las acciones

Las acciones (funciones) de Zustand tienen referencias estables: no cambian cuando se actualiza el estado. Puede seleccionarlas sin shallow y no provocarán renderizaciones.
// Actions are always stable — no shallow needed
const addToCart = useCartStore(s => s.addToCart);

Helper useShallow (Zustand v5+)

Zustand v5 proporciona la utilidad useShallow, que envuelve automáticamente el selector con igualdad superficial y hace que el código sea más claro.
import { useShallow } from 'zustand/react/shallow';

const { items, loading } = useCartStore(
  useShallow(s => ({ items: s.items, loading: s.loading }))
);

Combinar selectores

Derive valores calculados dentro de los selectores para evitar almacenar estado derivado en el store. Calcule totales, listas filtradas o cadenas con formato en el selector.
const totalPrice = useCartStore(
  s => s.items.reduce((sum, item) => sum + item.price, 0)
);

Analizar las renderizaciones de Zustand

Use el Profiler de React DevTools para comprobar que los selectores funcionan. Después de añadir un elemento no relacionado al store, compruebe que el componente que solo usa el selector de nombre NO aparezca en el gráfico de llamas del commit.

Comprobación rápida

¿Por qué necesita usar la igualdad superficial cuando un selector de Zustand devuelve un objeto?

Repaso

Use siempre selectores específicos. Use igualdad superficial al seleccionar varios valores como un objeto. Derive los valores calculados dentro de los selectores. Las acciones tienen referencias estables y no necesitan shallow.

A continuación

Siguiente lección: **Persistir el estado con el middleware persist**: sincronizará el estado de Zustand con localStorage mediante el middleware persist.

Preguntas frecuentes

¿La lección «Selectores y prevención de renderizados innecesarios» es gratis?

Sí — el texto completo de «Selectores y prevención de renderizados innecesarios» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Selectores y prevención de renderizados innecesarios»?

Extraiga fragmentos específicos del estado mediante selectores para que los componentes solo se vuelvan a renderizar cuando sea necesario. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Selectores y prevención de renderizados innecesarios»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Crear su primer store de Zustand
  2. Selectores y prevención de renderizados innecesarios
  3. Persistir el estado con el middleware persist
  4. DevTools de Zustand y pruebas de stores
← Volver a React Academy