0Pricing
React Academy · Lección

VariableSizeList: alturas de fila dinámicas

Gestione elementos de distintas alturas con VariableSizeList y el patrón de callback itemSize.

VariableSizeList: alturas de fila dinámicas es una lección gratuita de React Academy en CoddyKit. Esta es la lección 3 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.

Cuando los elementos tienen alturas diferentes

A veces las filas no son uniformes: una lista de chat combina mensajes cortos y largos, o un feed contiene tarjetas con cantidades de contenido variables. FixedSizeList no puede gestionar este caso porque presupone un único itemSize constante.

Para estos casos, react-window ofrece un tipo de lista que permite que cada elemento declare su propio tamaño.

VariableSizeList sustituye a FixedSizeList

VariableSizeList funciona como FixedSizeList, pero admite un tamaño específico para cada elemento. En su lugar, debe importarlo y proporcionar una función que devuelva el tamaño para un índice determinado.

Todo lo demás, incluida la función de renderizado children y la prop style crítica, permanece igual, por lo que la migración es pequeña.

itemSize como función

Con VariableSizeList, itemSize es una función que recibe un índice y devuelve la altura de esa fila en píxeles. react-window la llama para calcular los desplazamientos y decidir cuál es la ventana visible.

Esto permite codificar alturas conocidas; por ejemplo, filas más altas para elementos con imágenes y filas más cortas para texto sin formato.

Calcular previamente frente a medir

Si conoce de antemano la altura de cada fila, puede devolverla directamente desde la función itemSize. Si las alturas dependen del contenido renderizado, debe medir las filas después de que se pinten.

Las alturas calculadas previamente son más sencillas y rápidas; las alturas medidas son más flexibles, pero requieren trabajo adicional para devolver los tamaños a la lista.

resetAfterIndex después de medir

VariableSizeList almacena en caché los desplazamientos de los elementos para mejorar el rendimiento. Cuando cambia una altura medida, debe llamar al método resetAfterIndex de la lista mediante su ref para que vuelva a calcular las posiciones desde ese índice en adelante.

Si lo olvida, quedarán desplazamientos obsoletos y las filas se desalinearán, por lo que resetAfterIndex es la clave para que funcione la medición dinámica.

El dilema de la altura

Existe un problema del tipo qué fue primero: necesita una altura para renderizar la fila, pero solo conoce la altura real después de renderizarla. La lista debe colocar una fila antes de poder medirla.

Para resolverlo, primero debe renderizarla con una estimación y corregir la posición cuando conozca la altura real.

Estimar, renderizar, medir y actualizar

El patrón habitual consiste en renderizar las filas con una altura estimada, medir su altura real después de pintarlas mediante un ref o ResizeObserver, guardar el valor medido y llamar a resetAfterIndex para actualizar las posiciones.

Este ciclo converge rápidamente, por lo que la lista termina teniendo los desplazamientos correctos después de la primera pasada de medición.

getItemSize debe ser estable

La función itemSize debe ser estable entre renderizados, normalmente envolviéndola en useCallback, para que la lista no invalide constantemente sus desplazamientos almacenados en caché.

Una función inestable definida directamente dentro del componente puede forzar recálculos innecesarios y perjudicar el rendimiento que la virtualización pretende proporcionar.

La ventaja y el coste de rendimiento

VariableSizeList hace más trabajo que FixedSizeList porque no puede asumir un desplazamiento constante y debe llevar un registro de los tamaños de cada elemento. Cuando se miden las alturas, esa medición adicional también añade coste.

En las listas cuyas filas realmente tienen alturas diferentes, este coste merece la pena; para las filas uniformes, FixedSizeList sigue siendo la opción más rápida y sencilla.

Volver a Fixed con una aproximación

Si la medición dinámica exacta resulta demasiado costosa, en ocasiones puede aproximarla. Agrupar las filas en unas pocas clases de altura fija o usar una media razonable puede permitirle seguir utilizando FixedSizeList.

Esto cambia un diseño perfecto al píxel por simplicidad y velocidad: un compromiso aceptable cuando se toleran pequeñas imperfecciones en los desplazamientos.

Comprobación rápida: itemSize de VariableSizeList

Recuerde cómo VariableSizeList obtiene la altura de cada fila.

Resumen: VariableSizeList

VariableSizeList gestiona filas de distintas alturas tomando itemSize como una función del índice. Las alturas pueden calcularse de antemano o medirse; las alturas medidas requieren el ciclo de estimar, renderizar, medir y actualizar con resetAfterIndex.

Mantenga estable la función itemSize con useCallback. Tiene un coste mayor que FixedSizeList, así que para filas uniformes o cuando basta con una aproximación, prefiera la variante fija.

Preguntas frecuentes

¿La lección «VariableSizeList: alturas de fila dinámicas» es gratis?

Sí — el texto completo de «VariableSizeList: alturas de fila dinámicas» 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 «VariableSizeList: alturas de fila dinámicas»?

Gestione elementos de distintas alturas con VariableSizeList y el patrón de callback itemSize. 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 3 de 4.

¿Cuánto tiempo toma la lección «VariableSizeList: alturas de fila dinámicas»?

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. El problema de renderizar listas grandes
  2. FixedSizeList: renderización de miles de elementos
  3. VariableSizeList: alturas de fila dinámicas
  4. Combinación de virtualización y obtención de datos
← Volver a React Academy