当前位置: 首页 > 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,
    };
  },
};

相关文章:

  • 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文件传输
  • 怎么能自己做网站/口碑营销成功案例有哪些
  • 外贸网站用什么语言/怎么做自己的网站
  • 中国工程招标网/深圳网站seo
  • destoon 网站搬家/中国seo
  • 金坛建设局网站/整站优化工具
  • 网站管理人员/网络营销图片素材