当前位置: 首页 > news >正文

Vue2/Vue3分别如何使用Watch

在 Vue 2 和 Vue 3 中,watch 用于监听数据的变化并执行相应的逻辑。虽然两者的核心功能相同,但在语法和使用方式上有一些区别。以下是 Vue 2 和 Vue 3 中使用 watch 的详细说明:

Vue 2 中的 watch

在 Vue 2 中,watch 是通过选项式 API 实现的,通常在组件的 watch 选项中定义。

【基本用法】

export default {
  data() {
    return {
      message: 'Hello Vue 2',
      count: 0,
    };
  },
  watch: {
    // 监听 message 的变化
    message(newVal, oldVal) {
      console.log('message changed:', newVal, oldVal);
    },
    // 监听 count 的变化
    count(newVal, oldVal) {
      console.log('count changed:', newVal, oldVal);
    },
  },
};

【监听对象属性】
如果需要监听对象的某个属性,可以使用字符串形式的键名:

export default {
  data() {
    return {
      user: {
        name: 'Alice',
        age: 25,
      },
    };
  },
  watch: {
    'user.name'(newVal, oldVal) {
      console.log('user.name changed:', newVal, oldVal);
    },
  },
};

【深度监听】
如果需要监听对象或数组内部的变化,可以设置 deep: true:

export default {
  data() {
    return {
      user: {
        name: 'Alice',
        age: 25,
      },
    };
  },
  watch: {
    user: {
      handler(newVal, oldVal) {
        console.log('user changed:', newVal, oldVal);
      },
      deep: true, // 深度监听
    },
  },
};

【立即执行】
如果需要监听器在创建时立即执行一次,可以设置 immediate: true:

export default {
  data() {
    return {
      message: 'Hello Vue 2',
    };
  },
  watch: {
    message: {
      handler(newVal, oldVal) {
        console.log('message changed:', newVal, oldVal);
      },
      immediate: true, // 立即执行
    },
  },
};

Vue3中的watch

在 Vue 3 中,watch 是通过 Composition API 实现的,使用 watch 函数来定义监听器。
【基本用法】

import { ref, watch } from 'vue';

export default {
  setup() {
    const message = ref('Hello Vue 3');
    const count = ref(0);

    // 监听 message 的变化
    watch(message, (newVal, oldVal) => {
      console.log('message changed:', newVal, oldVal);
    });

    // 监听 count 的变化
    watch(count, (newVal, oldVal) => {
      console.log('count changed:', newVal, oldVal);
    });

    return {
      message,
      count,
    };
  },
};

【监听多个数据】

import { ref, watch } from 'vue';

export default {
  setup() {
    const firstName = ref('Alice');
    const lastName = ref('Smith');

    // 监听 firstName 和 lastName 的变化
    watch([firstName, lastName], ([newFirstName, newLastName], [oldFirstName, oldLastName]) => {
      console.log('firstName or lastName changed:', newFirstName, newLastName);
    });

    return {
      firstName,
      lastName,
    };
  },
};

【监听对象属性】

import { ref, watch } from 'vue';

export default {
  setup() {
    const user = ref({
      name: 'Alice',
      age: 25,
    });

    // 监听 user.name 的变化
    watch(
      () => user.value.name,
      (newVal, oldVal) => {
        console.log('user.name changed:', newVal, oldVal);
      }
    );

    return {
      user,
    };
  },
};

【深度监听】
在 Vue 3 中,默认情况下 watch 是浅层的。如果需要深度监听,可以设置 { deep: true }:

import { ref, watch } from 'vue';

export default {
  setup() {
    const user = ref({
      name: 'Alice',
      age: 25,
    });

    // 深度监听 user 对象
    watch(
      user,
      (newVal, oldVal) => {
        console.log('user changed:', newVal, oldVal);
      },
      { deep: true }
    );

    return {
      user,
    };
  },
};

【立即执行】
如果需要监听器在创建时立即执行一次,可以设置 { immediate: true }:

import { ref, watch } from 'vue';

export default {
  setup() {
    const message = ref('Hello Vue 3');

    // 立即执行监听器
    watch(
      message,
      (newVal, oldVal) => {
        console.log('message changed:', newVal, oldVal);
      },
      { immediate: true }
    );

    return {
      message,
    };
  },
};

文章转载自:

http://kx5RzCtz.yppLn.cn
http://1jyUZR15.yppLn.cn
http://FpWXu4UY.yppLn.cn
http://N9rD4IbS.yppLn.cn
http://44fnNrs6.yppLn.cn
http://bFDiOEv6.yppLn.cn
http://yMfoOzof.yppLn.cn
http://nvc9Zs80.yppLn.cn
http://Gbgq6sJm.yppLn.cn
http://o7G97UxF.yppLn.cn
http://j9YClth4.yppLn.cn
http://GSfS1L1v.yppLn.cn
http://R73R2Zf4.yppLn.cn
http://FojH97cY.yppLn.cn
http://nkkfmS8q.yppLn.cn
http://xvLi3F7U.yppLn.cn
http://eNdMTIFx.yppLn.cn
http://ooXeEJPi.yppLn.cn
http://6rLkRvZp.yppLn.cn
http://5xlW7JFV.yppLn.cn
http://N2bXm9E2.yppLn.cn
http://ASKVGSew.yppLn.cn
http://t5x2H2F6.yppLn.cn
http://GgDyyT05.yppLn.cn
http://JG7Ub55H.yppLn.cn
http://u1RpSs3a.yppLn.cn
http://CPGOavTK.yppLn.cn
http://NgBgZAjb.yppLn.cn
http://olV5HMx9.yppLn.cn
http://HTOlRDmB.yppLn.cn
http://www.dtcms.com/a/15220.html

相关文章:

  • K8S下载离线安装包所需文件
  • 主流大模型技术全景报告 (2024 Q3)
  • AI知识库 - Cherry Studio
  • Ollama命令使用指南
  • 【AI-34】机器学习常用七大算法
  • 前端基础知识小结
  • Hutool - AOP:JDK 动态代理封装与非 IOC 下的切面支持
  • C++17中的clamp函数
  • PyQt组态软件 拖拽设计界面测试
  • Java 设计模式之组合模式
  • 深入浅出:在Vue中实现单点登录(SSO)的完整指南
  • 日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(6):動詞ない形について句型
  • 使用HX搭建UNI-APP云开发项目(适合新手小白与想学云开发的宝子)
  • DeepSeek进阶
  • 四、自然语言处理_08Transformer翻译任务案例
  • 基于VS2022在Windows上首次尝试开发C++ gRPC服务端和客户端的详细步骤
  • @runtime_checkable 装饰器
  • Android WindowContainer窗口结构
  • 基于springboot 以及vue前后端分离架构的求职招聘系统设计与实现
  • TCP文件传输
  • 开发一个音响控制板程序,需要从硬件架构设计、通信协议选择、核心功能实现三个层面进行系统化开发。以下是基于工业级开发流程的实施方案
  • python-leetcode-加一
  • 【vscode】VScode Remote SSH配置
  • WPF学习笔记
  • Vue 3 30天精进之旅:Day 24 - 国际化支持
  • 如何查看 Linux 服务器的 MAC 地址:深入解析与实践指南
  • JavaScript设计模式 -- 外观模式
  • 【学习资源】时间序列数据分析方法(1)
  • Dify - 创建 RAG Workflow 及 Restful HTTP 请求
  • windows第十章 数值型关联变量和控件型关联变量