我在更新某个父级的子组件时遇到了问题,该组件的检测策略设置为OnPush .

一个演示该问题的小应用程序已设置here on StackBlitz .

子组件中的某些操作通过事件 Launcher 输出到其OnPush父级,后者又将另一个事件发送到“祖父母” . 然后祖父母更新一些容器属性(容器引用保持不变) .

当我从OnPush组件内部执行此操作时,所有使用已更改属性的子项都将被重新呈现,没有问题 .

当我使用不在OnPush组件中的组件时,它的子项不会更新,直到我在其中执行某些操作(例如,在演示应用程序中单击“无用按钮”) .

问题:

  • 为什么它会那样工作?两种情况下的更新方案似乎都相同(我没有输入参考) .

  • 如何正确设置此结构,以便更新在第二种情况下有效?

现在我已经在OnPush父设置上设置了一个额外的输入,它接受属性本身作为另一个输入,子设备使用该输入值作为输入 . 但它似乎不是处理这个问题的正确方法 .