VueJS 中更新的钩子和观察者有什么区别?



我发现了VueJS,但我并不完全理解updated和观察者之间的区别。

更新的钩子

这是一个生命周期钩子。根据官方文档,每当数据更改时都会触发它。因此,每当更新propdata(值,而不仅仅是指针(时,都会调用updated

观察家

在文档中,将观察程序与计算属性进行比较。但是在哪些情况下最好使用更新而不是观察者?

似乎在这两种情况下,调用回调时 DOM 都不会更新(如果我们想操纵 DOM 中的更改,则需要nextTick()(。我看到的唯一区别是,只有当一个精确的属性(或数据(在始终调用updated的地方更新时,才会触发watchers

如果我们可以更准确(watchers(,我无法弄清楚每当数据更改时更新(updating(的优点是什么。

这是我的想法。

谢谢:)

围绕更新的生命周期挂钩响应DOM 中的更改。观察程序响应数据中的更改。DOM 更改通常是为了响应数据更改,但它们可能不是相关组件拥有的数据。可以使用updated的一个示例是注意到槽内容已更新。

我认为与观察者更好的类似生命周期钩子可能是beforeUpdate钩子。updated钩子在虚拟 DOM 重新渲染调用,而beforeUpdate钩子在虚拟 DOM 重新渲染之前调用。您可以在链接到的图表上看到此内容的可视化表示形式。


在哪些情况下最好使用更新而不是观察者?(...)如果我们可以更准确(watch(,我无法弄清楚每当数据更改时更新(updated(的优点是什么。

文档说,如果可以通过这种方式实现目标,您应该首选观察程序或计算属性,而不是updated。我的理解是,包含updated钩子是为了允许用户监视对虚拟 DOM 的任何更改(见下文(。


这是 Vue 2.0 发行说明中关于watchupdated

现在,通过vm.$watch创建的用户观察程序会在关联的组件重新渲染之前触发。这使用户有机会在组件重新渲染之前进一步更新其他状态,从而避免不必要的更新。例如,您可以监视组件道具,并在道具更改时更新组件自己的数据。

要在组件更新后对 DOM 执行某些操作,只需使用updated生命周期挂钩。

最新更新