trackByF: Angular의 새로운 목록 최적화
Cuando actualizamos una propiedad en nuestro componente este dispara en property binding haciendo que la template se reescriba con la nueva lista, pero mucho ojo! No es que agregue nuevos elementos si no lo que pasa es que limpia todo los elementos en el dom y los vuelve a escribir, si bien en una lista pequeña esto no importa mucho, si la cantidad de elementos es grande o el objeto iterado tiene muchas Profiades puede traer problemas en performance de la aplicación.
Ahora necesitamos algo Importante para que angular pueda trabajar correctamente nuestra lista, y es que cada elemento tenga un identificador único, de esa forma angular sabrá qué objetos son nuevos en a lista y cuales ya los tienes impresos.
mucho cuchicheo, vamos con el ejemplo!
Mi lista de compras
Bien digamos que tengo una aplicación simple que tiene mi lista de compras del super(de verdad tengo que hacer compras este finde).
Y tenemos un botón que lo que hace es cambiar la lista por una idéntica! Pero Con 2 새로운 요소.
Veamos que hay en el código
app.component.ts
import { Component, VERSION } from '@angular/core';
import { Item } from './models/item.model';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
lista: Item[] = []
constructor() {
this.lista = [
{id: '1', desc: 'Ajos'},
{id: '2', desc: 'Tomates'},
{id: '3', desc: 'Papas'},
{id: '4', desc: 'Cebollas'},
];
}
actualizar() {
this.lista = [
{id: '1', desc: 'Ajos'},
{id: '2', desc: 'Tomates'},
{id: '3', desc: 'Papas'},
{id: '4', desc: 'Cebollas'},
{id: '5', desc: 'mostaza'},
{id: '6', desc: 'Mayonesa'},
];
}
}
app.component.html
<h1>Lista de compras</h1>
<button (click)="actualizar()"> Actualizar </button>
<ul>
<li *ngFor="let item of lista">{{ item.desc }}</li>
</ul>
Al presionar el botón vemos que se reescribe toda la lista
Como podemos con el tooldev de chrome vemos que todos los elemento está volviendo a reescribirse a pesar de que la lista solo agrega 2 elementos nuevos.
Ahora vamos a crear un método el cual indiquemos cual como pueden identificar como único los elementos de la lista.
trackByFn(index: number, item: Item) {
return item.id;
}
el primer parametro es el índice del elemento y el segundo es el propio elemento, lo que debe retornar nuestra función es cual es la propiedad o identificador que hace único a ese elemento de la lista. En este caso nuestro caso la propiedad "id".
Ahora le indicamos a nuestro ngFor que esta es la trackby
이 마기아!
vemos resaltado en morado, lo único que se escribió en el DOM fueron los 2 nuevos elementos, dándole un mejor rendimiento a nuestra aplicación.
Ahora manos a la obra y optimiza tus ngFor, no olvides apoyarme con unas palmaditas.
Puede seguirme en youtube tambien tengo unos cuantos tutoriales.
Aquí tiene el código!
Reference
이 문제에 관하여(trackByF: Angular의 새로운 목록 최적화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ricardoarana/trackbyf-optimizando-nuestras-listas-en-angular-2hdk
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import { Component, VERSION } from '@angular/core';
import { Item } from './models/item.model';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
lista: Item[] = []
constructor() {
this.lista = [
{id: '1', desc: 'Ajos'},
{id: '2', desc: 'Tomates'},
{id: '3', desc: 'Papas'},
{id: '4', desc: 'Cebollas'},
];
}
actualizar() {
this.lista = [
{id: '1', desc: 'Ajos'},
{id: '2', desc: 'Tomates'},
{id: '3', desc: 'Papas'},
{id: '4', desc: 'Cebollas'},
{id: '5', desc: 'mostaza'},
{id: '6', desc: 'Mayonesa'},
];
}
}
<h1>Lista de compras</h1>
<button (click)="actualizar()"> Actualizar </button>
<ul>
<li *ngFor="let item of lista">{{ item.desc }}</li>
</ul>
trackByFn(index: number, item: Item) {
return item.id;
}
Reference
이 문제에 관하여(trackByF: Angular의 새로운 목록 최적화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ricardoarana/trackbyf-optimizando-nuestras-listas-en-angular-2hdk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)