vue 中的 watch 属性是生命周期钩子吗?

Posted

技术标签:

【中文标题】vue 中的 watch 属性是生命周期钩子吗?【英文标题】:Is a watch property in vue a lifecycle hook? 【发布时间】:2019-10-11 19:05:34 【问题描述】:

vuejs 生命周期钩子中是否包含任何 watch 属性?

在这里你可以看到codepen的这段摘录:

const myMixin = 
  methods: 
    increment()
      console.log('methods from mixins')
      this.myData+=2
    
  ,
  watch:
    myData()
      console.log('watcher from mixins')
    
  


new Vue(
  el: '#app',
  mixins:[myMixin],
  data: function () 
    return 
      myData: 0
    
  ,
  methods:
    increment()
      console.log('methods from comp')
      this.myData++
    
  ,
  watch:
    myData()
      console.log('watcher from component')
    
  
);

myData 来自 myMixin 的观察者和组件的被调用。然而,来自组件的正常方法被覆盖。

在文档中说:

同名的钩子函数被合并到一个数组中,这样所有的钩子函数都会被调用。 Mixin 钩子会在组件自己的钩子之前被调用。

但是,watch 不是钩子函数/生命周期钩子对吧?

【问题讨论】:

【参考方案1】:

所有键的默认合并策略的逻辑可以在Vue repo的vue/blob/dev/src/core/util/options.js文件中找到。

正如您将在第 208 行看到的那样,watch 键有一个特殊的合并策略,它会导致创建一个数组(类似于挂钩的逻辑)。

【讨论】:

【参考方案2】:

正如the documentation 所说,

当 mixin 和组件本身包含重叠选项时, 它们将使用适当的策略“合并”。

例如,数据对象进行递归合并,其中 发生冲突时组件的数据优先。

预计watch 选项以及data 选项将被合并,这就是列出的示例中发生的情况。

【讨论】:

但是为什么methods选项没有合并,而是methods在组件中优先。还有哪些其他选项将被合并,哪些选项会将组件的选项作为优先级并覆盖 mixin 的选项? 成员被覆盖是 mixin 模式所期望的行为,请参阅 en.wikipedia.org/wiki/Mixin 。至于 Vue mixin 的实现,它试图通过额外合并钩子和一些选项来解决常见情况,特别是 datawatch,可能还有更多。 methods 不在合并选项中,因为这弊大于利。如果需要,您可以使用 this.$parent.foo() 访问覆盖的方法。 另外,如果有人知道将合并哪些选项以及将覆盖哪些其他选项,请发表评论,非常感谢,谢谢。 @KevinChandra 你可以在这里查看完整列表github.com/vuejs/vue/blob/dev/src/core/util/options.js#L208

以上是关于vue 中的 watch 属性是生命周期钩子吗?的主要内容,如果未能解决你的问题,请参考以下文章

vue生命周期函数区别作用

vue生命周期钩子函数

Vue的生命周期

Vue的生命周期

vue 生命周期 和 生命周期的执行顺序

vue实例的生命周期