Я из React и работаю с Angular уже несколько месяцев. Компонент React обновляет только необходимый HTML при повторном рендеринге, в то время как компонент Angular, кажется, полностью рендерится, когда состояние не изменено. Если я изменяю состояние напрямую, кажется, работает нормально.
Вот мой самый простой пример:
У меня есть основной компонент , который содержит состояние:
items = [{ name: "John", age: 8 }, { name: "Jane", age: 20 }];
и, по его мнению, выводит список элементов:
<item *ngFor="let item of items" [item]="item"></item>
компонент item выглядит следующим образом:
@Component({
selector: "item",
template: `
<p>
{{ item.name }}, {{ item.age }}
<input type="checkbox" />
</p>
`
})
export class ItemComponent {
@Input() item: any;
}
Я добавил этот флажок в компоненте item, чтобы заметить, когда компонент будет полностью перерисован.
Итак, я делаю галочки и увеличиваю age
для каждого пользователя в состоянии.
Если я увеличиваю его, изменяя состояние, представление обновляется, как ожидается, и флажки остаются установленными:
this.items.forEach(item => {
item.age++;
});
Но если я изменю age
без непосредственного изменения состояния, весь список будет перерисован, и флажок больше не проверяется:
this.items = this.items.map(item => ({
...item,
age: item.age + 1
}));
Вот полный пример CodeSandbox .
Может ли кто-нибудь объяснить, почему это происходит, и как я могу сделать список не полностью повторно визуализировать, когда я не изменяю состояние?