我來自 React,我已經(jīng)使用 Angular 幾個(gè)月了。React 組件在重新渲染時(shí)僅更新必要的 HTML,而 Angular 組件在狀態(tài)未發(fā)生變化時(shí)似乎完全重新渲染。如果我直接改變狀態(tài)似乎工作得很好。這是我的一個(gè)非?;镜睦樱何矣斜3譅顟B(tài)的主要組件:items = [{ name: "John", age: 8 }, { name: "Jane", age: 20 }];并在其視圖中呈現(xiàn)項(xiàng)目列表:<item *ngFor="let item of items" [item]="item"></item>該項(xiàng)目組成部分看起來像這樣:@Component({ selector: "item", template: ` <p> {{ item.name }}, {{ item.age }} <input type="checkbox" /> </p> `})export class ItemComponent { @Input() item: any;}我在 item 組件中添加了該復(fù)選框,只是為了注意組件何時(shí)完全重新渲染。所以我要做的是勾選復(fù)選框并age為狀態(tài)中的每個(gè)用戶增加。如果我通過改變狀態(tài)來增加它,視圖會(huì)按預(yù)期更新,并且復(fù)選框保持選中狀態(tài):this.items.forEach(item => { item.age++;});但是,如果我更改age而不直接改變狀態(tài),則整個(gè)列表將重新呈現(xiàn)并且不再選中復(fù)選框:this.items = this.items.map(item => ({ ...item, age: item.age + 1}));這是CodeSandbox 中的完整示例。任何人都可以解釋為什么會(huì)發(fā)生這種情況,以及當(dāng)我不改變狀態(tài)時(shí)如何使列表不完全重新呈現(xiàn)?
當(dāng)狀態(tài)改變而沒有突變時(shí),Angular 會(huì)重新呈現(xiàn)組件列表
慕慕森
2021-06-10 09:08:40