Vue3.5中新增的baseWatch函数用法详解

 更新时间:2024年11月26日 14:49:01   作者:前端欧阳  
在Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样,下面就跟随小编一起来了解一下它的具体使用吧

前言

Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样。区别就是我们之前用的watch API是和Vue组件以及生命周期是一起实现的,他们是深度绑定的。而Vue3.5新增的base watch函数是一个新的函数,他的实现和Vue组件以及生命周期没有一毛钱关系。

@vue/runtime-core

vue3是模块化设计,他将核心功能拆分为多个独立的模块,如下图:

比如reactivity模块中就是响应式的核心代码、runtime-core模块就是运行时相关的核心代码、compiler-core模块就是编译相关的核心代码。

并且这些模块还被单独当作npm包进行发布,命名规则是@vue+模块名。比如reactivity模块对应的npm包就是@vue/reactivity。如下图:

所以如果我们只需要vue的响应式功能,理论上只需要导入@vue/reactivity包即可。比如我之前的文章:涨见识了!脱离vue项目竟然也可以使用响应式API,在这篇文章中我就介绍了如何脱离Vue项目,在node.js项目中使用vue的响应式API。

但是不知道你有没有注意到,在demo中我是require("vue"),而不是require("@vue/reactivity")

因为watch不是由@vue/reactivity中导出的,而是由@vue/runtime-core中导出的,如果我只引入@vue/reactivity就会报错了。

const { ref, watch, watchEffect } = require("vue");

const count = ref(0);

// 模拟count变量的值修改
setInterval(() => {
  count.value++;
}, 1000);

watch(count, (newVal) => {
  console.log("触发watch", newVal);
});

watchEffect(
  () => {
    console.log("触发watchEffect", count.value);
  },
  {
    flush: "sync",
  }
);

watch的实现是和vue组件以及生命周期深度绑定的,而vue组件以及生命周期明显是和响应式无关的。他们的实现是在runtime-core模块中,而非reactivity模块中,这也就是为什么watch的实现是放在runtime-core模块中。

据说性能是 Taro  10 倍的小程序框架 vuemini 底层也是依靠@vue/reactivity实现的,但是由于watch是由@vue/runtime-core中提供的,小程序框架却只引入了@vue/reactivity,所以作者不得不手写了一个watch函数。

重构watch函数

智子在写Vue Vapor时又拆了一个新的模块,叫做runtime-vapor。如果你不了解Vue Vapor,可以看看我之前的文章:没有虚拟DOM版本的vue(Vue Vapor)

他们遇到一个问题需要在runtime-vapor模块中使用watch函数,而watch函数是位于runtime-core模块中。但是又不应该在runtime-vapor模块中直接引用runtime-core模块,所以Vue Vapor团队的绚香音就将watch函数重构到了reactivity模块中,这样在runtime-vapor模块中直接使用reactivity模块中的watch函数就行了。

这也就是为什么需要重构watch函数到reactivity模块中。

在欧阳的个人看法中watch函数本来就是属于响应式中的一部分,他在runtime-core模块中反而不合理。在欧阳第一次看vue3源码时就在奇怪为什么没有在reactivity模块中找到watch函数的实现,而是在runtime-core模块中实现的。

当watch函数重构到reactivity模块后,小程序框架 vuemini 的作者也发了一篇帖子。

watch函数重构到reactivity模块后,小程序框架中手写的watch函数都不需要了,因为reactivity模块已经提供了。

总结

vue3.5版本中,Vue Vapor团队在reactivity模块中重构实现了一个watch函数。重构的这个watch函数和我们现在使用的watch函数用法是一样的,区别在于以前的watch函数的实现和Vue组件以及生命周期是深度绑定的,而重构的watch函数和Vue组件以及生命周期一毛钱关系都没有。

这个改动对于普通开发者可能没什么影响,但是对于下游项目,比如Vue mini来说还是很受益的。因为以前他们需要自己去手写watch函数,现在reactivity提供了后就不需要这些手写的watch函数了。

到此这篇关于Vue3.5中新增的baseWatch函数用法详解的文章就介绍到这了,更多相关Vue3.5 baseWatch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3自定义插件的作用场景及使用示例详解

    vue3自定义插件的作用场景及使用示例详解

    这篇文章主要为大家介绍了vue3自定义插件的作用场景及使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 使用Vue实现一个树组件的示例

    使用Vue实现一个树组件的示例

    这篇文章主要介绍了使用Vue实现一个树组件的示例,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2020-11-11
  • vue在响应头response中获取自定义headers操作

    vue在响应头response中获取自定义headers操作

    这篇文章主要介绍了vue在响应头response中获取自定义headers操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Element-ui 自带的两种远程搜索(模糊查询)用法讲解

    Element-ui 自带的两种远程搜索(模糊查询)用法讲解

    这篇文章主要介绍了Element-ui 自带的两种远程搜索(模糊查询)用法讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Vue3 中自定义插件的实现方法

    Vue3 中自定义插件的实现方法

    在 Vue 中,一些简单的功能,我们可以直接定义为全局方法,然后挂到 Vue 上就能使用了,这篇文章主要介绍了Vue3 中自定义插件的实现,需要的朋友可以参考下
    2022-08-08
  • vue实现分页组件

    vue实现分页组件

    这篇文章主要为大家详细介绍了vue实现分页组件的具体代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • vue解决Not allowed to load local resource问题的全过程

    vue解决Not allowed to load local resource问题的全过程

    这篇文章主要给大家介绍了关于vue解决Not allowed to load local resource问题的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • 详解Vue.js入门环境搭建

    详解Vue.js入门环境搭建

    这篇文章主要介绍了详解Vue.js入门环境搭建,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • npm如何更新VUE package.json文件中依赖的包版本

    npm如何更新VUE package.json文件中依赖的包版本

    这篇文章主要介绍了npm如何更新VUE package.json文件中依赖的包版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue弹窗父子组件调用问题示例详解

    vue弹窗父子组件调用问题示例详解

    这篇文章主要介绍了vue弹窗父子组件调用问题,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论