vue之watchEffect

news2024/11/21 2:32:43
在Options API中,我们可以通过watch选项来侦听data或者props的数据变化,当数据变化时执行某一些操作。 在Composition API中,我们可以使用watchEffect和watch来完成响应式数据的侦听。 watchEffect用于自动收集响应式数据的依赖,需要手动指定侦听的数据源。

侦听数据的变化

案例:
watchEffect传入的函数会被立即执行一次,并且在执行的过程中会收集依赖; 其次,只有收集的依赖发生变化时,watchEffect传入的函数才会再次执行;
<template>
  <div>
    <h2>{{name}}-{{age}}</h2>
    <button @click="changeName">修改name</button>
    <button @click="changeAge">修改age</button>
  </div>
</template>

<script>
  import { ref, watchEffect } from 'vue';

  export default {
    setup() {
      // watchEffect: 自动收集响应式的依赖
      const name = ref("why");
      const age = ref(18);

      const changeName = () => name.value = "kobe"
      const changeAge = () => age.value++

      watchEffect(() => {
        console.log("name:", name.value, "age:", age.value);
      });

      return {
        name,
        age,
        changeName,
        changeAge
      }
    }
  }
</script>

停止侦听

如果在某些情况下希望停止侦听,这个时候我们可以获取watchEffect的返回值函数,调用该函数即可。
 const stop = watchEffect(() => {
        console.log("name:", name.value, "age:", age.value);
      });

      const changeName = () => name.value = "kobe"
      const changeAge = () => {
        age.value++;
        if (age.value > 25) {
          stop();
        }
      }
比如在上面的案例中,当age达到25的时候就停止侦听。

清除副作用

在开发中我们需要在侦听函数中执行网络请求,但是在网络请求还没有达到的时候,停止了侦听器,或者侦听器/侦听函数被再次执行了。 那么上一次的网络请求应该被取消掉,这个时候我们就可以清除上一次的副作用;
在给watchEffect传入的函数被回调时,其实可以获取到一个参数:onInvalidate
当  副作用即将重新执行 或者 侦听器被停止 时会执行该函数传入的回调函数,此时我们可以在传入的回调函数中,执行一些清除工作。

  const stop = watchEffect((onInvalidate) => {
        const timer = setTimeout(() => {
          console.log("网络请求成功~");
        }, 2000)

        // 根据name和age两个变量发送网络请求
        onInvalidate(() => {
          // 在这个函数中清除额外的副作用
          // request.cancel()
          clearTimeout(timer);
          console.log("onInvalidate");
        })
        console.log("name:", name.value, "age:", age.value);
      });

setup中使用ref

在setup中如何使用ref获取元素或组件?
其实非常简单,我们只需要定义一个ref对象,绑定到元素或者组件的ref属性上即可。

这里也可以用生命周期函数mounted来检测是否能正确获取到对应的dom元素。不过这里侦听函数会立即执行一次,所以先打印一个null值,后面等页面挂载完成了,搜集的依赖就再次被回调执行一次,打印真正的dom对象。

 默认情况下,组件的更新会在副作用函数执行之前。

调整watchEffect执行时机

如果我们希望在第一次的时候就打印出来对应的元素呢?
这个时候就需要改变副作用函数的执行时机:默认值是pre,在元素挂载或者更新之前执行。
所以会先打印出来一个null,当依赖的title发生改变时,就会再次执行一次,打印出元素;

 watchEffect(() => {
        console.log(title.value);
      }, {
        flush: "post" //  获取组件更新完成之后的DOM
      })
flush 选项还接受sync,这将强制效果始终同步触发。然而这是低效的,应该很少需要。

 

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

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

相关文章

Jmeter实现websocket协议接口测试

一&#xff0e;为了方便使用&#xff0c;首先将jmeter设置成中文&#xff0c;有两种方法&#xff1a; 1.在Jmeter界面进行设置&#xff0c;Options ->Choose Language ->Chinese(Simplified)&#xff0c;这种方法在关闭jmeter重启后又会恢复成默认的英文&#xff0c;如果…

学习Python编程好找工作吗?

说起编程语言&#xff0c;不少人都会推荐学习Python&#xff0c;但很多人对Python不太了解&#xff0c;所以比较好奇“学习Python编程是否好找工作”&#xff0c;关于这个问题&#xff0c;小编通过下文为大家详细解答一下。 从市场情况来讲&#xff0c;Python职位比较多&…

阿里内部进阶学习SpringBoot+Vue全栈开发实战文档

前言 Spring 作为一个轻量级的容器&#xff0c;在JavaEE开发中得到了广泛的应用&#xff0c;但是Spring 的配置烦琐臃肿&#xff0c;在和各种第三方框架进行整合时代码量都非常大&#xff0c;并且整合的代码大多是重复的&#xff0c;为了使开发者能够快速上手Spring&#xff0…

105.(leaflet之家)leaflet态势标绘-聚集地修改

地图之家总目录(订阅之前请先查看该博客) 地图之家:cesium+leaflet+echart+地图数据+地图工具等相关内容的介绍 文章末尾处提供保证可运行完整代码包,运行如有问题,可“私信”博主。 效果如下所示: 下面献上完整代码,代码重要位置会做相应解释 <!DOCTYPE html>…

Python函数总结

在Python中&#xff0c;函数是一个带有名字的代码块&#xff0c;可以被反复调用。函数可以帮助你组织和重用代码&#xff0c;使你的程序更整洁&#xff0c;更易于维护。本文将会深入探索Python的秘密 目录 定义函数 自定义函数 内置函数 函数式方程 高阶函数 函数标注 …

Linux5.4.0内存分配器核心代码解析

理论 伙伴系统 核心代码解析 __rmqueue_smallest函数 在zone的free_list上进行搜索,找到符合migratetype的、大小为order的空闲页面块 static __always_inline struct page *__rmqueue_smallest(struct zone *zone, unsigned int order,int migratetype

【TypeScript】常用类型声明详情概述

目录 TypeScript常用类型 类型注解 TS类型概述 原始类型 数组类型 对象类型 函数类型 类型别名 接口 元组 字面量类型 枚举 any类型 typeof操作符 类型推论 类型断言 TypeScript常用类型 TypeScript是JS的超集&#xff0c;TS提供了JS的所有功能&#xff0c;并额…

【Linux】第五部分 网络配置

【Linux】第五部分 网络配置 文章目录【Linux】第五部分 网络配置5. 网络配置5.1 对vmware网络连接的三种模式探讨&#xff0c;Bridged&#xff08;桥接模式&#xff09;、NAT&#xff08;网络地址转换模式&#xff09;、Host-Only&#xff08;仅主机模式&#xff09;Bridged&a…

车企数据治理的障碍是什么?如何解决?

​在全行业数字化转型的浪潮下&#xff0c;底层技术的发展与行业之间的碰撞&#xff0c;正在成为变革的巨大力量&#xff0c;汽车行业也是如此。汽车行业的“数字化转型”是利用新的技术驱动行业的创新与发展&#xff0c;改善用户体验、重构商业模式、降本增效&#xff0c;而这…

跟着pink老师学习第二天的学习总结(1)

1.CSS初始化 <style>/* 清除浏览器默认格式 */*{margin:0;padding:0}/* 斜体文字不倾斜 */em,i{font-style:normal}/* 去掉li的小圆点 */li{list-style:none}img{/* 照顾低版本浏览器,如果图片外面包含链接,会出现边框 */border:0;/* 取消图片底部与边框产生的缝隙 */ve…

element plus + vue3表单第一次数据未清空的bug问题解决

使用框架&#xff1a;element Plus vue3 场景描述&#xff1a; 场景一&#xff1a; 表单的添加和修改功能&#xff0c;公用同一个弹框&#xff0c;点击修改后&#xff0c;点击添加表单显示的是上次修改的数据。 场景二&#xff1a; 点击修改&#xff0c;数据回显到表单&…

谁能主宰智能驾驶赛道?「芯片+感知」是第一主角

得「感知」者&#xff0c;得天下。 这句话依然适用于当今的自动驾驶赛道&#xff0c;实际上从Mobileye开始&#xff0c;到特斯拉&#xff0c;都是如此。尤其是智能化变革的快速演进&#xff0c;对于下游车企来说&#xff0c;具备规控的自研能力&#xff08;更多考虑到系统的体验…

【栈与队列】——栈的实现及应用

目录概念栈的实现初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数判断栈是否为空栈的销毁栈的应用概念 栈 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底栈中的数据元素遵…

python+pyqt5+mysql设计图书管理系统(5)- 普通用户图书管理界面

前面已经实现了图书管理系统中的一部分功能,今天就在完整最后一点内容,使用pyqt5设计出detail_stu.ui文档,然后使用PyUIC转为detail_stu.py文档,就得到了设计好的界面文档的代码。然后再逐一实现界面上对应的功能。 设计的界面如下: 1.菜单栏选项功能实现 菜单栏-登录选…

物流批量查询,如何筛选出物流发往时间大于12小时的单号

小编分享一个方法批量查询物流信息&#xff0c;并分析揽收到发往的时间差大于12小时的单号&#xff0c;有需要的朋友可以接着往下看&#xff0c;希望能给大家带来帮助。 第一步&#xff0c;运行【快递批量查询高手】在主界面中的任意空白处【右键】选择添加单号。 第二步&#…

box-shadow阴影的妙用-笔记

box-shadow: 0 0 4px 0 #ff0000; 注意阴影的这个颜色要和边框的颜色一致&#xff0c;就能出这种效果

【车载开发系列】UDS诊断---链接控制服务($0x87)

【车载开发系列】UDS诊断—链接控制服务&#xff08;$0x87&#xff09; 诊断---链接控制服务&#xff08;$0x87&#xff09;【车载开发系列】UDS诊断---链接控制服务&#xff08;$0x87&#xff09;一.概念定义二.应用场景三.报文格式1&#xff09;报文请求2&#xff09;肯定响应…

【LeetCode每日一题】——152.乘积最大子数组

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 动态规划 二【题目难度】 中等 三【题目编号】 152.乘积最大子数组 四【题目描述】 给你一个…

文件操作:文件的使用打开关闭与读写(顺序读写)

1.为什么使用文件 我们前面学习结构体时&#xff0c;写了通讯录的程序&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通讯录中增加、删除数据&#xff0c;此时数据是存放在内存中&#xff0c;当程序退出的时候&#xff0c;通讯录中的数据自然就不存在了&#xff0c;等下…

软件测试:sql注入·依赖基本sql语句

查询语句 目的&#xff1a;回顾数据库查询条件语句&#xff08;手工sql注入操作基础知识&#xff09; 语句&#xff1a; 1. 查询所有字段&#xff1a;select * from users; 2. 查询指定字段&#xff1a; select user,password from users; 3. 条件查询&#xff1a;…