Enciclopédia de Erros

Expressão track resultou em chaves duplicadas para uma determinada coleção.

Uma expressão track especificada no loop @for avaliou para chaves duplicadas para uma determinada coleção, ex.:

@Component({    template: `@for (item of items; track item.value) {{{item.value}}}`,})class TestComponent {    items = [{key: 1, value: 'a'}, {key: 2, value: 'b'}, {key: 3, value: 'a'}];}

No exemplo fornecido, a expressão de tracking item.key encontrará duas chaves duplicadas a (nos índices 0 e 2).

Chaves duplicadas são problemáticas do ponto de vista de correção: como o loop @for não pode identificar uniquamente os itens, ele pode escolher nós DOM correspondentes a outro item (com a mesma chave) ao realizar movimentações de DOM ou destruir.

Também há uma penalidade de performance associada com chaves duplicadas - internamente o Angular deve usar estruturas de dados mais sofisticadas e lentas ao repetir sobre coleções com chaves duplicadas.

Corrigindo o erro

Altere a expressão de tracking de forma que ela identifique uniquamente um item em uma coleção. No exemplo discutido, a expressão track correta usaria a propriedade única key (item.key):

@Component({    template: `@for (item of items; track item.key) {{{item.value}}}`,})class TestComponent {    items = [{key: 1, value: 'a'}, {key: 2, value: 'b'}, {key: 3, value: 'a'}];}