0Pricing
React Academy · Leçon

VariableSizeList : hauteurs de lignes dynamiques

Gérez des éléments de hauteurs différentes avec VariableSizeList et le schéma de rappel itemSize.

VariableSizeList : hauteurs de lignes dynamiques est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Quand les éléments ont des hauteurs différentes

Les lignes ne sont pas toujours uniformes : une liste de discussion peut mélanger des messages courts et longs, ou un flux peut contenir des cartes dont le contenu varie. FixedSizeList ne peut pas gérer ce cas, car il suppose une seule propriété itemSize constante.

Pour ces situations, react-window propose un type de liste qui permet à chaque élément de définir sa propre taille.

VariableSizeList remplace FixedSizeList

VariableSizeList fonctionne comme FixedSizeList, mais accepte une taille propre à chaque élément. Vous l’importez à la place et fournissez une fonction qui renvoie la taille pour un indice donné.

Tout le reste, notamment la fonction de rendu et l’indispensable propriété de style, reste identique ; la migration est donc limitée.

itemSize comme fonction

Avec VariableSizeList, itemSize est une fonction qui reçoit un indice et renvoie la hauteur de cette ligne en pixels. react-window l’appelle pour calculer les décalages et déterminer la fenêtre visible.

Vous pouvez ainsi décrire les hauteurs connues, par exemple en prévoyant des lignes plus hautes pour les éléments contenant des images et des lignes plus courtes pour le texte brut.

Précalculer ou mesurer

Si vous connaissez à l’avance la hauteur de chaque ligne, vous pouvez la renvoyer directement depuis la fonction itemSize. Si les hauteurs dépendent du contenu rendu, vous devez mesurer les lignes après leur affichage.

Les hauteurs précalculées sont les plus simples et les plus rapides ; les hauteurs mesurées sont plus flexibles, mais demandent un travail supplémentaire pour renvoyer les tailles à la liste.

resetAfterIndex après une mesure

VariableSizeList met en cache les décalages des éléments pour améliorer les performances. Lorsqu’une hauteur mesurée change, vous devez appeler la méthode resetAfterIndex sur sa référence afin qu’elle recalcule les positions à partir de cet indice.

Si vous l’oubliez, les décalages obsolètes désalignent les lignes ; resetAfterIndex est donc essentiel au bon fonctionnement des mesures dynamiques.

Le dilemme de la hauteur

Un problème de type « l’œuf ou la poule » se pose : vous avez besoin d’une hauteur pour rendre la ligne, mais vous ne connaissez sa hauteur réelle qu’après son rendu. La liste doit positionner une ligne avant de pouvoir la mesurer.

Pour résoudre ce problème, commencez par effectuer le rendu avec une estimation, puis corrigez la position lorsque la hauteur réelle est connue.

Estimer, rendre, mesurer, mettre à jour

Le modèle standard consiste à rendre les lignes avec une hauteur estimée, à mesurer leur hauteur réelle après l’affichage au moyen d’une référence ou de ResizeObserver, à enregistrer la valeur mesurée, puis à appeler resetAfterIndex pour mettre à jour les positions.

Cette boucle converge rapidement : après le premier passage de mesure, la liste finit par utiliser les bons décalages.

getItemSize doit rester stable

La fonction itemSize doit rester stable d’un rendu à l’autre, généralement en étant enveloppée dans useCallback, afin que la liste n’invalide pas constamment ses décalages mis en cache.

Une fonction instable définie directement dans le rendu peut imposer des recalculs inutiles et nuire aux performances que la virtualisation est censée offrir.

Le compromis de performance

VariableSizeList effectue davantage de travail que FixedSizeList, car elle ne peut pas supposer un décalage constant et doit suivre la taille de chaque élément. Lorsque les hauteurs sont mesurées, cette mesure supplémentaire a également un coût.

Pour les listes dont les lignes ont effectivement des hauteurs différentes, ce coût est justifié ; pour les lignes uniformes, FixedSizeList reste le choix le plus rapide et le plus simple.

Revenir à FixedSizeList avec une approximation

Si la mesure dynamique exacte est trop coûteuse, vous pouvez parfois l’approximer. Regrouper les lignes en quelques catégories de hauteurs fixes ou utiliser une moyenne raisonnable peut vous permettre de conserver FixedSizeList.

Vous échangez ainsi une mise en page parfaite au pixel près contre davantage de simplicité et de rapidité, un compromis acceptable lorsque de légères imperfections de décalage sont tolérables.

Vérification rapide : itemSize de VariableSizeList

Rappelez-vous comment VariableSizeList apprend la hauteur de chaque ligne.

Récapitulatif : VariableSizeList

VariableSizeList gère les lignes de hauteurs différentes en prenant itemSize sous forme d’une fonction de l’indice. Les hauteurs peuvent être calculées à l’avance ou mesurées ; les hauteurs mesurées nécessitent la boucle estimation-rendu-mesure-mise à jour avec resetAfterIndex.

Conservez la fonction itemSize avec useCallback. Elle coûte plus cher que FixedSizeList ; pour les lignes uniformes ou lorsque l’approximation suffit, préférez donc la variante à taille fixe.

Questions Fréquemment Posées

La leçon « VariableSizeList : hauteurs de lignes dynamiques » est-elle gratuite ?

Oui — le texte complet de « VariableSizeList : hauteurs de lignes dynamiques » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « VariableSizeList : hauteurs de lignes dynamiques » ?

Gérez des éléments de hauteurs différentes avec VariableSizeList et le schéma de rappel itemSize. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « VariableSizeList : hauteurs de lignes dynamiques » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le problème du rendu des grandes listes
  2. FixedSizeList : afficher des milliers d’éléments
  3. VariableSizeList : hauteurs de lignes dynamiques
  4. Combiner virtualisation et récupération de données
← Retour à React Academy