Skip to main content

Command Palette

Search for a command to run...

Pourquoi c'est important d'utiliser la fonction trackBy dans un *ngFor en Angular ?

Updated
2 min read
Pourquoi c'est important d'utiliser la fonction trackBy dans un *ngFor en Angular ?
E

Je suis Ezéchiel Amen AGBLA, Angular Developer Expert & Ionic Developer Expert, passionné par le développement web et mobile. Je mets la lumière sur des notions liées à Angular et à Ionic pour la communauté francophone.

Dans nos applications Angular, nous sommes parfois amenés à afficher des listes d'élements sur nos interfaces utilisateur. Pour pouvoir réaliser cette opération, nous itérons sur des tableaux d'élements simples ou d'objets en utilisant la directive *ngFor.
De façon basique, voici un exemple de comment procédons-nous généralement :

<ul *ngFor="let item of items">
    <li> {{ item.name }} </li>
</ul>
  • items est un tableau d'objets qui contient la propriété name comme un attribut de chacun de ces objets.

Supposons à présent que nous ayons une très grande liste d'éléments à afficher et qu'après affichage, nous faisons des traitements sur quelques éléments de cette liste.

Lorsque nous inspectons notre page web en utilisant le navigateur Google Chrome par exemple, une fois dans le menu Rendering puis l'option Paint Flashing, nous remarquons que tous les éléments de notre liste sont mis à jour à chaque fois, même ceux qui n'ont pas subi de modifications. Résultat, nous aurons des soucis de performance.

Heureusement pour nous, la core team de Angular y avait déjà pensé !
La solution est très simple. Il s'agit de la fonction trackBy😁

En effet, la fonction trackBy nous permet d'identifier chaque élément de façon unique dans notre DOM. Ainsi, lorsque nous modifions des éléments de notre liste, seuls ces éléments sont mis à jour et toute notre liste ne subit plus de rafraîchissement.
Voici un exemple de comment procéder en reprenant l'exemple précédent :

<ul *ngFor="let item of items; trackBy: itemTrackBy" >
    <li> {{ item.name }} </li>
</ul>
export class ItemComponent {
 ...   
    public itemTrackBy(index: number, item: Item) {
      return item.id;
    }
}

En somme, nous comprenons à présent pourquoi il est crucial de faire gaffe lorsque nous manipulons des boucles *ngFor dans nos applications Angular. C'est tout à notre avantage de permettre au DOM de pouvoir identifier de façon unique chaque élément de nos listes car nous gagnerons nettement en performance en cas de besoin.

Pour plus d'informations 👉 TrackBy Function

J

C'est la première fois j'en entends parler, elle me sera bien utile. Merci pour le partage.

1
E

C'est super ça 😃 Le plaisir est pour moi !

C

Est-ce la fonction trackBy c'est uniquement les éléments d'une liste elle permet de suivre ?

Ou bien elle peut nous permettre de suivre n'importe quel élément du DOM

1
E

La fonction est intégrée à la directive *ngFor. Du coup, elle ne peut que fonctionner dans ce contexte 😃

C

C'est compris, merci

More from this blog

A

angulardev.fr

25 posts

Je suis Ezéchiel Amen AGBLA, Angular Developer Expert & Ionic Developer Expert, passionné par le développement web et mobile.