Vue3中watchEffect高级侦听器的具体使用

 更新时间:2024年01月21日 11:54:17   作者:Unique·Blue  
Vue3中新增了一种特殊的监听器watchEffect,本文主要介绍了Vue3中watchEffect高级侦听器的具体使用,具有一定的参考价值,感兴趣的可以了解一下

示例均采用 <script setup>,且包含 typescript 的基础用法

前言

Vue3 中新增了一种特殊的监听器 watchEffect,它的类型是:

function watchEffect(
  effect: (onCleanup: OnCleanup) => void,
  options?: WatchEffectOptions
): StopHandle

下面通过实例来理解下它的用法

一、简单使用

  • 第一个参数就是要运行的 副作用函数 effect
  • 函数内 用到哪些数据 才会 监听哪些数据
  • 且会 立刻执行一次(immediate)
<input type="text" v-model="message1" />
<br />
<input type="text" v-model="message2" />
<br />
import { ref, watchEffect } from "vue";

const message1 = ref<string>("飞机");
const message2 = ref<string>("火车");

watchEffect(() => {
  console.log("message1========>,", message1);
  // 不使用 message2 就不会监听 message2
  // console.log("message2========>,", message2);
});

二、副作用 effect 的参数

  • effect 的参数 也是一个 函数,用来 注册清理回调
  • 清理回调 会在 该副作用下一次执行前被调用,可以用来清理无效的副作用,例如等待中的异步请求
<input type="text" v-model="message1" />
<br />
<input type="text" v-model="message2" />
<br />
import { ref, watchEffect } from "vue";

const message1 = ref<string>("飞机");
const message2 = ref<string>("火车");

watchEffect((onCleanup) => {
  console.log("message11111========>,", message1);
  console.log("message22222========>,", message2);

  onCleanup(() => {
    console.log("onCleanup —————— 下一次运行之前要做的事");
  });
});

页面刷新,首次打印:

在这里插入图片描述

更改输入框的值,再次打印:

在这里插入图片描述

三、watchEffect 返回值

  • 返回值是一个用来 停止侦听器 的函数,调用后不再侦听
  • 需要注意的是:停止时,不影响最后一次 onCleanup 的执行
<input type="text" v-model="message1" />
<br />
<input type="text" v-model="message2" />
<br />
<button @click="stopWatch">停止watchEffect</button>
const stop = watchEffect((onCleanup) => {
  console.log("message11111========>,", message1);
  console.log("message22222========>,", message2);

  onCleanup(() => {
    console.log("onCleanup —————— 下一次运行之前要做的事");
  });
});

const stopWatch = () => {
  stop();
};

页面刷新,首次打印:

在这里插入图片描述

更改输入框的值,再次打印:

点击按钮 停止侦听,再次打印:

四、options配置

watchEffect 的第二个参数是配置项:

  • flush:watch 的执行顺序
    • pre | post | sync ,默认:pre,具体含义可以看上一篇 watch 中的解释
    • 一般需要在 dom 更新之后再获取的情况,可以设置为 post
  • onTrack 用于开发环境调试
  • onTrigger 用于开发环境调试
<input id="ipt" v-model="iptVal" />
const iptVal = ref<string>("aa");

watchEffect(
  () => {
    // 测试 flush
    const spanEle = document.getElementById("ipt");
    // flush = pre 时,打印 null; flush = post 时,打印节点
    console.log("spanEle========>,", spanEle); 

    // 修改 iptVal 测试 onTrack、onTrigger
    console.log("iptVal============>", iptVal.value);
  },
  {
    flush: "post",
   	// 收集依赖时触发
    onTrack: () => {
      debugger;
    },
    // 更新时触发
    onTrigger: () => {
      debugger;
    },
  }
);

五、周边 api

  • watchPostEffect()watchEffect() 使用 flush: 'post' 选项时的别名
  • watchSyncEffect()watchEffect() 使用 flush: 'sync' 选项时的别名

到此这篇关于Vue3中watchEffect高级侦听器的具体使用的文章就介绍到这了,更多相关Vue3 watchEffect高级侦听器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Vue监听数据渲染DOM完以后执行某个函数详解

    Vue监听数据渲染DOM完以后执行某个函数详解

    今天小编就为大家分享一篇Vue监听数据渲染DOM完以后执行某个函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • Vue 3.0中Treeshaking特性及作用

    Vue 3.0中Treeshaking特性及作用

    Tree shaking 是一种通过清除多余代码方式来优化项目打包体积的技术,就是在保持代码运行结果不变的前提下,去除无用的代码,本文给大家介绍Vue 3.0中Treeshaking特性是什么,感兴趣的朋友一起看看吧
    2023-10-10
  • vue3集成Element-plus实现按需自动引入组件的方法总结

    vue3集成Element-plus实现按需自动引入组件的方法总结

    vue3出来一段时间了,element也更新了版本去兼容vue3,下面这篇文章主要给大家介绍了关于vue3集成Element-plus实现按需自动引入组件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • vue3.0搭配.net core实现文件上传组件

    vue3.0搭配.net core实现文件上传组件

    这篇文章主要介绍了vue3.0搭配.net core实现文件上传组件,帮助大家开发Web应用程序,完成需求,感兴趣的朋友可以了解下
    2020-10-10
  • 基于Vue插入视频的2种方法小结

    基于Vue插入视频的2种方法小结

    本文通过两种方法给大家介绍了基于vue插入视频的方法,每种方法通过实例代码给大家介绍的都非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Vue Camera组件功能及常用使用方法

    Vue Camera组件功能及常用使用方法

    Vue Camera组件是一个用于在Web应用中使用摄像头的Vue插件,它提供了一些常见的功能和方法来控制摄像头和捕获图像或视频数据,本文给大家介绍Vue Camera组件的常见功能和使用方法,感兴趣的朋友一起看看吧
    2023-11-11
  • 如何使用Vue3.2+Vite2.7从0快速打造一个UI组件库

    如何使用Vue3.2+Vite2.7从0快速打造一个UI组件库

    构建工具使用vue3推荐的vite,下面这篇文章主要给大家介绍了关于如何使用Vue3.2+Vite2.7从0快速打造一个UI组件库的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • VUE表格显示错位的两种解决思路分享

    VUE表格显示错位的两种解决思路分享

    这篇文章主要介绍了VUE表格显示错位的两种解决思路,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 用Vue Demi同时支持Vue2和Vue3的方法

    用Vue Demi同时支持Vue2和Vue3的方法

    这篇文章主要介绍了用Vue Demi同时支持Vue2和Vue3的方法,实际开发中,同一个API在不同的版本中可能导入的来源不一样,比如ref方法,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • vue实现数字变换动画的示例代码

    vue实现数字变换动画的示例代码

    本文主要介绍了vue实现数字变换动画的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论