【问题标题】:What is the difference between updated hook and watchers in VueJS?VueJS 中更新的钩子和观察者有什么区别?
【发布时间】:2017-07-08 06:44:40
【问题描述】:

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

更新钩子

这是一个生命周期钩子。根据the official documentation,只要数据发生变化就会触发。因此,每当更新 propdata(值,而不仅仅是指针)时,就会调用 updated

观察者

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

似乎在这两种情况下,调用回调时 DOM 都没有更新(如果我们想要操作 DOM 中的更改,则需要nextTick())。我看到的唯一区别是watchers 仅在更新一个精确的属性(或数据)时触发,而updated 总是被调用。

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

这是我的想法。

谢谢:)

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    围绕更新的生命周期挂钩响应DOM 中的更改。观察者响应数据的变化。 DOM 更改通常是为了响应数据更改,但它们可能不是相关组件拥有的数据。可以使用updated 的一个示例是noticing that slot content has updated

    【讨论】:

    • 当前的 vue 文档不支持这个视图。虽然他们提到您可以使用更新的钩子来执行 DOM 操作,但他们建议最好避免这种情况并改用观察者。 v3.vuejs.org/api/options-lifecycle-hooks.html#updated
    • @TheFool 重点是观察者响应数据变化,而更新的钩子在 DOM 变化之后被调用。这就是区别。这仍然是文档所说的。
    • 好吧,我明白了,有道理。它们不会在值更改时触发,而是在 DOM 更改时触发。
    【解决方案2】:

    我认为对观察者来说更好的类似生命周期钩子可能是the beforeUpdate hookupdated 钩子在虚拟 DOM 重新渲染之后 被调用,而beforeUpdate 在虚拟 DOM 重新渲染之前 被调用。您可以看到此on the diagram you linked to 的可视化表示。


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

    The documentation says,如果可以通过这种方式实现您的目标,您应该更喜欢观察者或计算属性而不是updated。我的理解是,包含updated 钩子是为了让用户可以观察虚拟 DOM 的任何变化(见下文)。


    这是the Vue 2.0 release noteswatchupdated 的解释:

    通过vm.$watch 创建的用户观察者现在在相关组件重新渲染之前被触发。这让用户有机会在组件重新渲染之前进一步更新其他状态,从而避免不必要的更新。例如,你可以观察一个组件的 prop 并在 prop 发生变化时更新组件自己的数据。

    要在组件更新后对 DOM 做一些事情,只需使用 updated 生命周期钩子。

    【讨论】:

    • 感谢您的解释。在什么情况下使用beforeUpdate 挂钩而不是watch 挂钩有意义?假设一个组件只有一个数据属性,而我们决定观察那个数据属性,这两者有什么区别吗?
    • 我的印象是watch 是您只希望在特定变量更改时运行代码时更好的选择。
    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 2015-09-19
    • 2021-01-09
    • 2013-05-15
    相关资源
    最近更新 更多