IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 7.0 vue3 watchEffect函数 -> 正文阅读

[JavaScript知识库]7.0 vue3 watchEffect函数

上一篇:

vue3 watch监听函数(reactive篇)icon-default.png?t=LBL2https://blog.csdn.net/qq_42543244/article/details/122281029上篇记录了watch监听函数(reactive篇),今天来记录vue3 新增的一个函数?watchEffect,其作用也是用于监听但是于watch又稍显不同,下面请看代码举例

<template>
  <h2>姓名:{{ data.name }}</h2>
  <h2>年龄:{{ data.age }}</h2>
  <h2>爱好:{{ data.hobby }}</h2>
  <h2>工作薪酬:{{ data.job.j1.money }} K</h2>
  <button @click="data.name = '李四'">改变姓名</button>
  <button @click="data.age += 1">改变年龄</button>
  <button @click="data.job.j1.money += 1">改变薪酬</button>
</template>

<script>
import { computed, reactive, watch, watchEffect } from "vue";
export default {
  name: "Demo",
  setup() {
    let data = reactive({
      name: "张三",
      age: 18,
      job: {
        j1: {
          money: 10,
        },
      },
    });

    /* 
      watch:需要指明监视的属性,也需要指明监听得回调  可以访问侦听状态变化前后的值
      watchEffect:不需要去指明监视的属性值,在监视的回调值使用到那个属性,就去监视那个属性, 
                  自动收集数据源作为依赖, watchEffect监听回调中没有状态变化前后的值
      watchEffect 和 computed 有些类似:
           computed:更加注重计算出来的值(即回调函数的返回值),retun必写 ,必有返回值
           watchEffect:更加注重过程(回调函数的函数体),不用写返回值 
     */

    // 关于watchEffect使用的业务场景可见下方举例(仅仅示例,别那么死板)
    // 当 data.name === '李四' && data.age === 19 去执行一个方法,方法如下
    function changeState(str) {
      console.log(`使用方法:${str},条件满足,我执行了!`);
    }

    // 1.使用watch方法 ,

    // ·首先考虑去监听单个属性是不可行的,并不是不能写,能写,但是有些许麻烦 如下:
    watch(
      () => data.name,
      (newVal) => {
        if (newVal === "李四" && data.age === 19) changeState("监听单个属性");
      }
    );
    watch(
      () => data.age,
      (newVal) => {
        if (newVal === 19 && data.name === "李四") changeState("监听单个属性");
      }
    );

    /*
    ·考虑如何同时区监听多个属性  此做法也不错,比监听单个属性可简写多行代码,
    业务逻辑也会更加清晰(确定时,当需要同时监听得属性过多的时候,写法会有点难受)
    */
    watch([() => data.name, () => data.age], (newVal) => {
      if (newVal[0] === "李四" && newVal[1] === 19)
        changeState("wacth同时监听属性");
    });

    // ·此外,我们还可以利用computed 来达到目的  此种方法也不错
    let state = computed(() => {
      if (data.name === "李四" && data.age === 19) return true;
      return false;
    });
    watch(state, (newVal) => {
      if (newVal) changeState("利用computed,达到同时监听得目的");
    });

    //2. 使用watchEffect方法  没错,你没看错 就是这么easy 一行代码0.0
    watchEffect(() => {
      if (data.name === "李四" && data.age === 19)
        changeState("使用watchEffect方法监听");

      //想要监听一个嵌套多层的属性,直接监听即可
      let money = data.job.j1.money;
      console.log(money);
    });

    return {
      data,
    };
  },
};
</script>

总结:

? ? ? watch:需要指明监视的属性,也需要指明监听得回调 ?可以访问侦听状态变化前后的值

? ? ? watchEffect:不需要去指明监视的属性值,在监视的回调值使用到那个属性,就去监视那个属性,?自动收集数据源作为依赖, watchEffect监听回调中没有状态变化前后的值

? ? ? watchEffect 和 computed 有些类似:

? ? ? ? ? ?computed:更加注重计算出来的值(即回调函数的返回值),retun必写 ,必有返回值

? ? ? ? ? ?watchEffect:更加注重过程(回调函数的函数体),不用写返回值

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:20:03  更:2022-01-04 13:22:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:09:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码