最新版vue3+TypeScript开发入门到实战教程之watch与watchEffect对比区别

1、概述

上节: 详解watch用法,watch功能是监视某些数据的变化,一旦发生变化,调用回调,传递新旧数值。watchEffect官方定义如下:
立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。

简言之,watchEffect是一个函数,只需向 watchEffect 传递一个函数即可。在这个函数内部,你引用的任何响应式数据都会被自动监视其变化。

以下通过两个实例对比watch与watchEffect区别

2、watch事例

  • 创建Fish组件,引入ref、watch

  • 创建鱼类价格与重量

  • 调用watch

  • 当价格大于15且重量大于5,就能赚到钱了

    <template>

    鱼类:鲫鱼

    鱼价格:{{ price }}元

    鱼重量:{{ weight }}kg

    <button @click="changePrice()">修改鱼类</button> <button @click="changeFishWeight()">修改鱼的重量</button> </template> <script setup> import { ref, watch} from 'vue' let price = ref(13); let weight = ref(3); function changePrice() { price.value += 1; } function changeFishWeight() { weight.value += 1; } watch([price, weight], (newValue) => { const [ price, weight ] = newValue; console.log(price, weight); if (price > 15 && weight > 5) { console.log('赚到钱了') } }) </script>

运行效果如下图,watch通过数组的方式监视price与weight变化,由于我们不关注旧值的数据,参数只有newValue。当点击按钮超过对应值时,打印赚到钱了。

3、watchEffect事例

  • 创建Fish组件,引入ref、watchEffect

  • 创建鱼类价格与重量

  • 调用watchEffect

  • 当价格大于15且重量大于5,就能赚到钱了

    <template>

    鱼类:鲫鱼

    鱼价格:{{ price }}元

    鱼重量:{{ weight }}kg

    <button @click="changePrice()">修改鱼类</button> <button @click="changeFishWeight()">修改鱼的重量</button> </template> <script setup> import { ref, watchEffect } from 'vue' let price = ref(13); let weight = ref(3);

    function changePrice() {
    price.value += 1;
    }
    function changeFishWeight() {
    weight.value += 1;
    }

    watchEffect(() => {
    console.log('watchEffect被调用');
    if (price.value > 15 && weight.value > 5) {
    console.log('赚到钱了')

    复制代码
    }

    })
    </script>

运行效果如下图,watchEffect会自动监视price与weight变化,并在页面加载成功时,就调用一次watchEffect。后边当点击修改价格修改重量按钮时,watchEffect都会被调用。

4、对比watch与watchEffect区别

  • 都能监听响应式数据的变化,不同的是监听数据变化的方式不同
  • watch:要明确指出监视的数据
  • watchEffect:不用明确指出监视的数据(函数中用到哪些属性,那就监视哪些属性)
相关推荐
candyTong1 天前
一觉醒来,大模型就帮我排查完页面性能问题
前端·javascript·架构
魔术师Grace1 天前
我给 AI 做了场入职培训
前端·程序员
玩嵌入式的菜鸡1 天前
网页访问单片机设备---基于mqtt
前端·javascript·css
前端一小卒1 天前
我用 Claude Code 的 Superpowers 技能链写了个服务,部署前差点把服务器搞炸
前端·javascript·后端
深海鱼在掘金1 天前
深入浅出 LangChain —— 第二章:环境搭建与快速上手
人工智能·typescript·langchain
滑雪的企鹅.1 天前
HTML头部元信息避坑指南大纲
前端·html
一拳不是超人1 天前
老婆天天吵吵要买塔罗牌,我直接用 AI 2 小时写了个在线塔罗牌
前端·ai编程
阿丰资源1 天前
SpringBoot+Vue实战:打造企业级在线文档管理系统
vue.js·spring boot·后端
excel1 天前
如何解决 Nuxt DevTools 中关于 unstorage 包的报错
前端
Rust研习社1 天前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust