gpt4 book ai didi

Angular ngOnChanges 和变化检测策略似乎是矛盾的?

转载 作者:行者123 更新时间:2023-12-05 04:01:27 25 4
gpt4 key购买 nike

NgChanges on 在输入绑定(bind)上运行 - 如果输入是引用类型 - 当引用发生变化时。即像这样的对象:

{ 值(value):2

如果它的值属性被改变,将不会导致 ngchanges 运行。这是因为 Angular 默认的变更检测策略会比较引用。

Angular2 change detection: ngOnChanges not firing for nested object

然而,当我们考虑两种变化检测策略时,这对我来说似乎是矛盾的:

默认 - 组件的变化检测在绑定(bind)发生变化时发生 - 但根据上面的内容,这不会识别引用类型的引用未发生变化的输入变化。或者换句话说,仅当值类型值更改或引用类型引用更改时,更改检测才会运行。

OnPush - 更改检测仅在值类型值更改或引用更改时运行。

显然,默认更改检测并不像我理解的那样工作,或者它与 OnPush 相同,但 onChanges 生命周期 Hook 似乎仅在与 OnPush 相同的规则下触发。

最佳答案

Angular 将始终比较先前输入值和新输入值的引用。 Default 和 OnPush 策略之间的区别在于何时 Angular 触发更改检测。

使用 Default 策略 Angular 会进行脏检查,这意味着它会在每次应用程序中发生更改时检查:它会检查每个浏览器事件、任何 HTTP 调用、计时器。 ...在大型应用程序中,这种方法对性能有很大影响。

通过 OnPush 变化检测,Angular 只会在其输入之一发生变化时检查组件(它依赖于 immutability 的概念来了解码件何时发生变化)。

如果您想更深入地了解 Angular 变化检测,我建议您阅读 this article由 Max Koretskyi 撰写,他详细解释了变化检测的工作原理。

关于Angular ngOnChanges 和变化检测策略似乎是矛盾的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55417598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com