Vue.js前端框架教程11:Vue监听器watch和watchEffect

news2024/12/21 14:50:01

文章目录

        • 监听器(watchers)
          • 基本用法
          • deep: true
          • immediate: true
          • 总结
        • watchEffect
          • 基本用法
          • 自动追踪依赖
          • 停止监听
          • 与 `watch` 的对比
          • 性能优化
          • 总结

监听器(watchers)

Vue 中,监听器(watchers)是一种观察和响应 Vue 实例上的数据变动的机制。Vue 提供了 watch 属性,允许我们执行副作用的函数,并且可以精确控制它们应该在何时运行。watch 可以监听 Vue 实例上的数据,或者任何 getter 函数。

基本用法

watch 的基本用法如下:

export default {
  data() {
    return {
      watchedProperty: ''
    };
  },
  watch: {
    // 监听 data 中的属性
    watchedProperty(newValue, oldValue) {
      // 在这里执行操作,当 watchedProperty 发生变化时
    }
  }
};

或者使用 Vue 3Composition API

import { watch, ref } from 'vue';

export default {
  setup() {
    const watchedProperty = ref('');

    watch(watchedProperty, (newValue, oldValue) => {
      // 在这里执行操作,当 watchedProperty 发生变化时
    });

    return {
      watchedProperty
    };
  }
};
deep: true

deep: truewatch 选项的一个参数,用于指定是否进行深度监听。深度监听意味着 Vue 会监听对象内部属性的变化,而不仅仅是对象本身的引用变化。

export default {
  data() {
    return {
      someObject: {
        nestedProperty: ''
      }
    };
  },
  watch: {
    // 深度监听 someObject 对象
    someObject: {
      handler(newValue, oldValue) {
        // 当 someObject 或其内部属性发生变化时,这个函数会被调用
      },
      deep: true
    }
  }
};
immediate: true

immediate: true 也是 watch 选项的一个参数,用于指定是否在监听器被创建之后立即以当前的值触发回调函数。

export default {
  data() {
    return {
      immediateProperty: ''
    };
  },
  watch: {
    // 立即执行,并且监听 immediateProperty 的变化
    immediateProperty: {
      handler(newValue, oldValue) {
        // 当 immediateProperty 发生变化时,这个函数会被调用
      },
      immediate: true
    }
  }
};

在上面的例子中,当组件实例化后,immediateProperty 的监听器会立即执行一次,即使 immediateProperty 还没有发生变化。

总结
  • 基本监听:用于监听数据的变化,并在变化时执行回调函数。
  • deep: true:用于深度监听一个对象,以便能够检测到对象内部属性的变化。
  • immediate: true:用于在监听器被创建时立即执行回调函数,无论监听的值是否已经变化。

这些监听选项使得 Vue 的响应式系统更加灵活和强大,允许开发者根据具体需求来精确控制数据变化时的行为。

watchEffect

Vue 3 中,watchEffect 是一个强大的响应式 API,它用于自动追踪其内部依赖的响应式数据变化,并在数据变化时执行相应的副作用。以下是 watchEffect 的一些关键特性和用法:

基本用法

watchEffect 接受一个函数作为参数,这个函数会在 watchEffect 被创建时立即执行一次,之后每当其依赖的响应式状态发生变化时,都会重新执行。

import { ref, watchEffect } from 'vue';

const count = ref(0);

watchEffect(() => {
  console.log(`count is now: ${count.value}`);
});

在这个例子中,每当 count 的值发生变化时,控制台都会打印出新的 count 值。

自动追踪依赖

watch 不同,watchEffect 不需要明确指定要监听的目标,而是会根据回调函数中访问的响应式数据自动追踪依赖。

停止监听

watchEffect 返回一个停止函数,调用这个函数可以手动停止监听,这有助于避免内存泄漏。

const stop = watchEffect(() => {
  // ...
});

// 停止监听
stop();
watch 的对比
  • 依赖声明watch 需要显式指定要监听的响应式数据,而 watchEffect 自动追踪内部访问的响应式数据。
  • 回调参数watch 提供新值 (newVal) 和旧值 (oldVal),而 watchEffect 无法直接访问变化前后的值。
  • 立即执行watch 默认不立即执行(可通过 immediate 选项控制),而 watchEffect 默认立即执行。
  • 适用场景watch 适合特定数据变化时执行操作,watchEffect 适合简单逻辑的响应式副作用处理。
性能优化

watchEffect 由于其自动追踪依赖的特性,可以减少冗余的代码,使得副作用的处理更加简洁。但在某些情况下,如果回调函数中的操作非常昂贵,可能会影响性能,因此需要合理使用。

总结

watchEffectVue 3 中用于响应式监听的一个新的工具,它提供了一种更简洁、更自动化的方式来处理响应式数据变化的副作用。通过自动追踪依赖和立即执行的机制,watchEffect 使得开发者可以更专注于业务逻辑的实现,而不需要关心依赖的声明和变化检测的细节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容

我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果(网页显示&#…

基于Redis的网关鉴权方案与性能优化

文章目录 前言一、微服务鉴权1.1 前端权限检查1.2 后端权限检查1.3 优缺点 二、网关鉴权2.1 接口权限存储至Redis2.2 网关鉴权做匹配 总结 前言 在微服务架构中,如何通过网关鉴权结合Redis缓存提升权限控制的效率与性能。首先,文章对比了两种常见的权限…

Ansible 批量管理华为 CE 交换机

注:本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地:贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具,AnsibleWorks 成立于 2012 年&a…

使用自定义分光比对分束器进行建模

分束器将一束光分成两个或多个单独的光束。它常用于各种光学系统,例如显微镜、干涉仪和成像设备。分束器可以由不同的材料制成,通常涂有金属或介电材料的薄层,以达到所需的分束效果。分束器的两种流行形式是立方体和板式。立方体分束器由两个…

C++对象数组对象指针对象指针数组

一、对象数组 对象数组中的每一个元素都是同类的对象&#xff1b; 例1 对象数组成员的初始化 #include<iostream> using namespace std;class Student { public:Student( ){ };Student(int n,string nam,char s):num(n),name(nam),sex(s){};void display(){cout<&l…

SQL进阶技巧:如何计算商品需求与到货队列表进出计划?

目录 0 需求描述 1 数据准备 2 问题分析 3 小结 累计到货数量计算 出货数量计算 剩余数量计算 0 需求描述 假设现有多种商品的订单需求表 DEMO_REQUIREMENT&#xff0c;以及商品的到货队列表 DEMO_ARR_QUEUE&#xff0c;要求按照业务需要&#xff0c;设计一个报表&#…

清远榉之乡托养机构为你深度分析:特殊碳水化合物饮食对自闭症的作用

在探索自闭症干预方法的道路上&#xff0c;各种尝试不断涌现。其中&#xff0c;特殊碳水化合物饮食引起了不少家长的关注。那么&#xff0c;特殊碳水化合物饮食对自闭症究竟有怎样的作用呢&#xff1f;今天&#xff0c;清远榉之乡托养机构为你深度分析。 榉之乡大龄自闭症托养机…

ElasticSearch 数据聚合与运算

1、数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现数据的统计、分析和运算。实现这些统计功能的比数据库的 SQL 要方便的多&#xff0c;而且查询速度非常快&#xff0c;可以实现近实时搜索效果。 注意&#xff1a; 参加聚合的字段必须是 keywor…

ONES 功能上新|ONES Copilot、ONES Wiki 新功能一览

ONES Copilot 可基于工作项的标题、描述、属性信息&#xff0c;对工作项产生的动态和评论生成总结。 针对不同类型的工作项&#xff0c;总结输出的内容有对应的侧重点。 应用场景&#xff1a; 在一些流程步骤复杂、上下游参与成员角色丰富的场景中&#xff0c;工作项动态往往会…

leecode494.目标和

这道题目第一眼感觉就不像是动态规划&#xff0c;可以看出来是回溯问题&#xff0c;但是暴力回溯超时&#xff0c;想要用动态规划得进行一点数学转换 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int nnums.size(),bagWeight0,s…

python使用Flask框架创建一个简单的动态日历

0. 运行效果 运行代码&#xff0c;然后在浏览器中访问 http://127.0.0.1:5000/&#xff0c;将看到一个动态日历&#xff0c;能够通过点击按钮切换月份。 1. 安装 Flask 首先&#xff0c;确保你已经安装了Flask。如果没有&#xff0c;可以使用以下命令安装&#xff1a; pip i…

一键优化Linux服务器性能(One Click Optimization of Linux Server Performance)

服务器上线之一键优化Linux服务器性能 以下是一个简单的Shell脚本&#xff0c;用于执行服务器上线优化的一些基本步骤。请注意&#xff0c;这个脚本是基于一个通用的Linux服务器配置&#xff0c;您可能需要根据您的具体需求和环境进行调整。 功能如下&#xff1a; 1.关闭SEL…

【电脑技巧】将键盘的方向键映射为alt+i、k、j、l

最近感觉方向键太远了&#xff0c;想找个方法修改键盘映射&#xff0c;有几种方式可以实现 使用powertoys的键盘映射&#xff08;软件太大了&#xff0c;只为键盘映射不值得下这个&#xff09;使用autohotkey&#xff08;通过脚本的方式&#xff0c;可以打包成exe文件&#xf…

apache-tomcat-6.0.44.exe Win10

apache-tomcat-6.0.44.exe Win10

文件防泄漏 | 文件防泄漏软件解决方案分享,网络数据泄露防护系统

文件防泄漏 | 文件防泄漏软件解决方案分享&#xff0c;网络数据泄露防护系统 企业面临的一大挑战是数据安全和隐私保护。 网络数据泄露不仅会导致经济损失&#xff0c;还会损害企业的声誉和客户关系。 为了应对这一挑战&#xff0c;域智盾软件应运而生&#xff0c;成为众多企…

11篇--图像边缘检测

图像梯度 要学习图像边缘检测&#xff0c;要先了解图像梯度的概念&#xff0c;我们正是通过梯度值来区分边缘像素点的 处于边缘附近的像素点与周围像素点的差距很大&#xff08;不然不会有边缘呈现&#xff09;&#xff0c;所以给边缘附近的的梯度之变化很快&#xff0c;通过…

细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV

目录 一、工程配置 1、时钟、DEBUG 2、GPIO 3、SPI2 4、USART6 5、NVIC 二、软件设计 1、FALSH &#xff08;1&#xff09;w25flash.h &#xff08;2&#xff09; w25flash.c 1&#xff09;W25Q16基本操作指令 2&#xff09;计算地址的辅助功能函数 3&#xff09;器…

.net core在linux导出excel,System.Drawing.Common is not supported on this platform

使用框架 .NET7 导出组件 Aspose.Cells for .NET 5.3.1 asp.net core mvc 如果使用Aspose.Cells导出excel时&#xff0c;报错 &#xff1a; System.Drawing.Common is not supported on this platform 平台特定实现&#xff1a; 对于Windows平台&#xff0c;System.Drawing.C…

岁末回望,追梦远方

又到了岁末年初&#xff0c;按惯例&#xff0c;风云我都会写一篇长长的感悟&#xff0c;给自己辞旧的总结复盘&#xff0c;迎新的追梦定调&#xff0c;今年赋诗一首&#xff0c;畅想一下诗和远方&#xff0c;简洁而又虚无&#xff0c;缥缈中坚定初心。 岁末回首步履深&#xf…