【问题标题】:How many times should trackBy be called in Angular ngFor [duplicate]在Angular ngFor中应该调用多少次trackBy [重复]
【发布时间】:2019-11-19 20:40:47
【问题描述】:

我已经开始在我的应用中使用trackBy 进行一些ngFor 迭代以提高性能。

调试时我注意到trackBy 函数被多次调用。我期望 trackBy 函数会被调用 1 x n 次,其中 n 是数组中的项目数。

我在模板中有一个简单的无序列表

<ul>
  <li *ngFor="let item of items; trackBy: trackByFn">{{item.name}}</li>
</ul>

然后我在 trackBy 函数中返回项目的 ID

trackByFn(index, item): void {
    return item.id;
}

在这个 StackBlitz 中,trackBy 函数在初始化时被调用 2 x n。 https://stackblitz.com/edit/angular-tm6zdh 在我的应用程序中,它甚至被调用了 7 x n 次。

函数被多次调用正常吗?

当函数被多次调用时,我应该担心性能吗?

另外,Angular 何时真正触发了 trackBy 函数?我在问,因为在我的应用程序中,滚动页面时也会触发 trackBy 函数,这不会更新列表中的任何项目。我无法在 Stackblitz 中重现它

【问题讨论】:

  • 这应该重新打开 - 这是一个非常好的问题,与直接在 HTML 模板中调用函数非常不同 - 我很欣赏最好的解决方案可能相似甚至可能相同,但这只是因为解决方案是否相同不会使问题相同...例如问:哪个乐队听起来像皇室成员 A:女王 Q:谁是英国君主 A:女王......非常不同的问题,相同的答案 - 这不是骗局

标签: angular


【解决方案1】:

这是运行 Angular 的标准变更检测。将changeDetection: ChangeDetectionStrategy.OnPush 添加到组件的声明中应该会减少trackBy 函数调用的数量。

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 2018-09-27
    • 1970-01-01
    • 2019-03-20
    • 2017-04-19
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多