Vue3中watch的应用场景

在 Vue 中,watch 用于监听数据的变化并执行相应的操作,适用于需要在数据变化时进行复杂处理或异步操作的场景。以下是一些常见的应用场景:

  1. 数据变化时的异步操作

    当需要在数据变化后发起 API 请求、执行定时器等异步操作时,watch 是合适的选择。

    例如:监听搜索关键词变化,延迟发送搜索请求以避免频繁调用接口:

    javascript 复制代码
    watch: {
      searchQuery(val) {
        // 清除之前的定时器
        clearTimeout(this.timer);
        // 延迟 500ms 执行搜索
        this.timer = setTimeout(() => {
          this.fetchSearchResults(val); // 调用接口的方法
        }, 500);
      }
    }
  2. 监听路由变化

    在单页应用中,需要根据路由参数的变化更新页面内容时,可以监听 $route

    javascript 复制代码
        watch: {
          '$route.params.id'(newId) {
            // 当路由中的 id 变化时,重新加载对应的数据
            this.loadData(newId);
          }
        }
  3. 复杂数据转换或计算

    当数据变化后需要进行复杂的转换或计算(超出 computed 的简单依赖关系)时,使用 watch

    javascript 复制代码
    watch: {
      userInfo(newVal) {
        // 当用户信息变化时,解析并处理多个字段
        this.fullName = `${newVal.firstName} ${newVal.lastName}`;
        this.isAdult = newVal.age >= 18;
        // 可能还包含其他复杂逻辑
      }
    }
  4. 监听对象 / 数组的深层变化

    对于对象或数组的深层属性变化,watch 可以通过 deep: true 配置进行监听:

    javascript 复制代码
    watch: {
      'form.user.name': {
        handler(newVal) {
          // 监听对象深层属性变化
          console.log('用户名变为:', newVal);
        },
        deep: true // 开启深层监听
      }
    }
  5. 初始化时立即执行监听逻辑 通过 immediate: true 配置,可以让监听在组件初始化时立即执行一次:

    javascript 复制代码
    watch: {
      defaultLanguage: {
        handler(val) {
          this.loadLanguagePack(val);
        },
        immediate: true // 初始化时就执行一次
      }
    }

注意watch 更适合处理 "副作用"(如异步操作、DOM 操作),而简单的依赖计算应优先使用 computed,因为 computed 具有缓存机制,性能更优。

相关推荐
yuanyxh7 小时前
Mac 软件推荐
前端·javascript·程序员
万少7 小时前
AtomCode开发微信小程序《谁去呀》 全流程
前端·javascript·后端
某人辛木7 小时前
Web自动化测试
前端·python·pycharm·pytest
Kagol8 小时前
Superpowers GSD gstack AgentSkills深度测评
前端·人工智能
excel9 小时前
JavaScript 字符串与模板字面量:从表象到本质理解
前端
京东云开发者9 小时前
当AI成为导演-如何用AI创作动漫短剧
前端
李白的天不白9 小时前
使用 SmartAdmin 进行前后端开发
java·前端
乘风gg10 小时前
🤡PUA AI Coding 工具 的 10 条终极语录
前端·ai编程·claude
学Linux的语莫10 小时前
Vue 3 入门教程
前端·javascript·vue.js
怕浪猫10 小时前
第一章、Chrome DevTools Protocol (CDP) 详解
前端·javascript·chrome