vue3计算属性和侦听与script setup区别使用

news2025/1/11 21:00:21

一、计算属性computed

  • 计算属性,只要依赖值不变,那么不会重新计算
  • 计算属性将基于它们的反应依赖关系缓存,提高性能
  • 对于任何包含响应式数据的复杂逻辑,应该使用计算属性
<template>
    <!--重复使用-->
    <p>{{ msg.split('').reverse().join('') }}</p>
    <p>{{ msg.split('').reverse().join('') }}</p>
    <p>{{ msg.split('').reverse().join('') }}</p>
    <!--计算属性-->
    <p>{{ reverseMsg }}</p>
    <p>{{ reverseMsg }}</p>
    <p>{{ reverseMsg }}</p>
    <!--计算方法-->
    <p>{{ reverseMsg1() }}</p>
    <p>{{ reverseMsg1() }}</p>
    <p>{{ reverseMsg1() }}</p>
</template>

<script>
export default {
    data() {
        return {
            msg: 'Hello组件'
        }
    },
    computed: {
        reverseMsg() {
            console.log("计算属性")
            return this.msg.split('').reverse().join('')
        }
    },
    methods: {
        reverseMsg1() {
            console.log('计算方法')
            return this.msg.split('').reverse().join('')
        },
    },
}
</script>

在这里插入图片描述

计算属性只是运行一次,计算方法会运行3次,所以计算属性效率比较高

二、侦听器 watch

每当message发生变化时,就会调用这个函数

<template>
	<!--文本-->
    <input type="text" v-model="msg">
    <!--对象-->
    <input type="text" v-model="user.name">
</template>

<script>
export default {
    data() {
        return {
            msg: 'Hello组件',
            user: {
                name: '张三',
                age: 18,
            }
        }
    },
    watch: {
        //普通    如果要测试,可以把msg1改为msg,下面改成msg1
        msg1: function (newValue, oldValue) {
            console.log(newValue, oldValue);
            //执行异步,或者复杂逻辑代码
            if (newValue.length < 5 || newValue.length > 11) {
                console.log("输入框的内容不能小于5或者大于11")
            }
        },
		//初始--侦听验证
        msg: {
            immediate: true,//初始化调用函数
            handler: function (newValue) {
                console.log("验证初始化", newValue)
                if (newValue.length < 5 || newValue.length > 11) {
                    console.log("输入框的内容不能小于5或者大于11")
                }
            }
        },
        //侦听对象
        "user.name": {
            handler: function (newValue) {
                console.log("侦听对象",newValue);
            },
            deep: true,//表示是佛深度监听,监听器会一层层的向下遍历,给对象每个属性都添加上侦听器
        }
    }
}
</script>
  • 普通侦听
  • 初始侦听
  • 对象侦听

< script setup > 计算属性与侦听

<template>
	<!--文本-->
    <input type="text" v-model="msg">
    <!--对象-->
    <input type="text" v-model="user.name">
	<!--计算属性获取-->
    <p>{{ reverseMsg }}</p>
</template>

<script setup>
import { ref, reactive, watch, watchEffect, computed } from 'vue'
const msg = ref("Hello组件")
const msg1 = ref("Hello组件1")
const user = reactive({
    name: '张三',
    age: 18,
})

//计算属性
const reverseMsg = computed(() => {
    console.log("计算属性")
    //返回一个带有value属性的对象
    return msg.value.split('').reverse().join('');
})

//普通侦听
watch(msg, (newValue, oldValue) => {
    console.log(newValue, oldValue);
    //执行异步,或者复杂逻辑代码
    if (newValue.length < 5 || newValue.length > 11) {
        console.log("输入框的内容不能小于5或者大于11")
    }
});

//初始侦听
watchEffect(() => {
    console.log("验证初始化", msg1.value)
});

//对象侦听
watchEffect(() => {
    console.log("对象", user.name)
});
</script>

内容解释
ref定义响应式变量,单个
reactive定义响应式引用类型,对象
watch普通侦听
watchEffect初始侦听
computed计算属性
toRefs(Object)使解构后的数据重新获得响应式,可直接使用
  • watchEffect不需要指定监听的属性,自动收集依赖,只要在回调引用到了响应的属性,只要这些属性发生改变,回调就会执行
  • watch只能侦听指定的属性,做出回调函数的执行,可以侦听多个,vue3开始后
  • watch可以获取到新值和旧值,watcheffect拿不到
  • watchEffect在组件初始化的时候就会自动执行一次,用来收集依赖,watch不需要,一开始就指定了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis——好友关注、共同关注、Feed流推送

1. 好友关注 在探店图文的详情页面中&#xff0c;可以关注发布笔记的作者&#xff1a; 进到探店笔记详情页&#xff0c;会发出两个请求&#xff0c;1是判断是否已经关注&#xff0c;2是尝试关注用户的请求。 关注是User之间的关系&#xff0c;是博主与粉丝的关系&#xff0c;…

你用过猿如意吗?猿如意可以使用ChatGPT哦,这里详细介绍了猿如意的功能,为什么我建议你使用猿如意,来看看吧

文章内容介绍 你是否还在为为每次安装IDE&#xff08;集成开发工具&#xff09;要去各种网站找教程而烦恼&#xff1f;你是否还在为各种文本格式转换而头痛&#xff1f;你是否在为斗图都不过兄弟们而卑微&#xff1f;你是否在为互联网中庞大冗杂却低效的教程文档而崩溃&#x…

SpringMVC:SpringMVC响应结果(7)

响应结果1. 环境准备2. 响应页面3. 响应文本数据4. 响应JSON数据&#xff08;掌握&#xff09;4.1 响应POJO对象4.2 响应POJO集合对象1. 环境准备 项目结构 pom.xml添加Spring依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"…

Mathtype / Word OMML / Latex 公式相互转换

文章目录Part.I 快应用Part.II 详细操作Chap.I Mathtype ↔ WordChap.II Mathtype ↔ LatexChap.III Latex ↔ WordPart.I 快应用 本文介绍了除了使用 Word 和 Mathtype 之外不使用其他任何辅助软件来实现三者相互转换的方法。 项目操作方法Mathtype 转成 Word OMMLWord菜单栏→…

信息化课堂怎么控屏教学的

现在的很多学校都在建设机房进行互动教学&#xff0c;相比于传统的教学方法&#xff0c;计算机的教学方式能够直观的表达每堂课的知识点&#xff0c;过程更为新颖&#xff0c;有利于吸引学生的注意力&#xff0c;提高在学习过程中的专注力。 但是&#xff0c;在提高增加课堂中学…

redo log 和binlog的相关问题及其衍生

目录 下在两阶段提交的不同时刻&#xff0c;MySQL异常重启会出现什么现象。 那么&#xff0c; MySQL怎么知道binlog是完整的? redo log 和 binlog是怎么关联起来的? 处于prepare阶段的redo log加上完整binlog&#xff0c;重启就能恢复&#xff0c;MySQL为什么要这么设计? …

ensp环境 AC+AP组网及ACweb界面配置

1.进入交换机划分Vlan并且配置好每条链路 The device is running! <Huawei>system-view [Huawei]sysname SW1 [SW1]vlan batch 100 101 [SW1]interface GigabitEthernet 0/0/2 [SW1-GigabitEthernet0/0/2]port link-type trunk [SW1-GigabitEthernet0/0/2]port trunk…

C++:类和对象:对象的初始化和清理

1 前言&#xff1a; 构造和析构的背景 1&#xff1a;C中的面向对象来源于生活&#xff0c;每个对象都会有初始值以及对象销毁前的清理数据设置 2&#xff1a;对象的初始化和清理是两个非常重要的安全问题&#xff0c;一个对象或者变量没有初始状态&#xff0c;对其使用后果是未…

左旋咪唑大单层/青蒿素长循环/酒石酸长春瑞滨热敏/棕榈酰五肽-4柔性/Anti-HER2免疫脂质体的研究

小编今天为大家分享了左旋咪唑大单层/青蒿素长循环/酒石酸长春瑞滨热敏/棕榈酰五肽-4柔性/Anti-HER2免疫脂质体的制备研究。 青蒿素长循环脂质体的制备&#xff1a; 青蒿素(artemisinin,ART)由于溶解度差,稳定性低,限制了其应用.因此,本研究采用长循环脂质体包裹青蒿素,增强其…

RDD中groupByKey和reduceByKey区别

groupByKey和reduceByKey区别 groupByKey 每个分区不聚合&#xff0c;等最终分组完成后调用Reduce再聚合 适用于求平均数、中位数等情况 reduceByKey 每个分区并行计算先实现分区内部聚合&#xff0c;然后再将每个分区的结果做最终的聚合实现分区间聚合 等同于MR中Combin…

电商之收单系统的webhook推送重试机制

文章目录1 问题背景2 前言3 解决方案3.1 核心思路3.2 数据库设计3.3 下一次发送webhook的时间算法3.3 详细设计4 延申思考1 问题背景 作为一个收单系统&#xff0c;当获取到一笔交易的支付结果时&#xff0c;就需要发送一个webhook消息给电商系统。电商系统收到webhook消息后&a…

4. Bean的生命周期

Bean的生命周期 1.生命周期相关概念介绍 生命周期&#xff1a;从创建到消亡的完整过程bean生命周期&#xff1a;bean从创建到销毁的整体过程bean生命周期控制&#xff1a;在bean创建后到销毁前做一些事情 2. Bean销毁时机 容器关闭前触发bean的销毁 关闭容器方式&#xff…

前端基础—Ajax和XML

Ajax和XML 说到这里&#xff0c;就不得不提到另一个概念&#xff1a;Ajax&#xff08;Asynchronous JavaScript&#xff09;&#xff0c;中文可以称之为“js的异步请求”&#xff0c;国内统一称为Ajax。 Ajax的概念是每次打开新的网页时&#xff0c;不要让页面整体刷新&#…

Java学习笔记 --- MySQL-常用数据类型

一、Mysql常用数据类型 二、数值型(整数)的基本使用 使用规范&#xff1a;在能够满足需求的情况下&#xff0c; 尽量选择占用空间小的 # 演示整形的使用 # 使用tinyint来演示范围 有符号 -128 ~ 127 如果没有符号 0-255 # 1. 如果没有指定 unsigned&#xff0c;则TINYINT就是…

卡塔尔世界杯门线技术(GOAL LINE TECHNOLOGY)背后的黑科技

现代职业足球运动员踢球时足球的行进速度&#xff0c;据国际足联统计数据&#xff0c;平均速度可达 60 英里/小时。极少数爆发力超强的职业球员&#xff0c;可以将这个速度刷新到超过 100 英里/小时。比如里斯本竞技队的巴西左后卫罗尼赫伯森在 2006 年以 131.82 英里/小时的速…

HACKTHEBOX——Sunday

nmap 第一次没有进行全端口扫描&#xff0c;只发现了79和111端口&#xff0c;79端口运行着finger程序&#xff0c;111则是rpcbind。 重新扫描一次&#xff0c;这次针对全部端口进行扫描。 nmap -p- -oA nmap 10.10.10.76 然后在扫描端口详细信息 可以发现22022端口运行着ssh…

数据结构——查找最全总结(期末复习必备)

目录 查找的基本概念 线性表的查找 顺序查找 折半查找&#xff08;二分或对分查找&#xff09; 分块查找&#xff08;索引顺序查找&#xff09; 树表的查找 二叉排序树 定义&#xff1a; 二叉排序树的查找&#xff1a; 二叉排序树的插入&#xff1a; 二叉排序树的创建&…

【缺陷识别】SVM金属表面缺陷分类与测量【含GUI Matlab源码 682期】

⛄一、简介&#xff08;附lunwen、答辩PPT&#xff09; 1 题目内容 金属板广泛应用在工业生产与生产生活的各方面。由于金属板制造过程涉及到的设备、工艺等多因素的影响&#xff0c;金属板表面容易出现种类较多、形态各异的缺陷&#xff0c;这些缺陷对金属板的耐磨性、抗腐蚀…

取整的四种方式

取整的四种方式一.基本认识二.四种取整方案1.零向取整2.地板取整3.向右取整4.四舍五入一.基本认识 这里按理说5/2应该为2.5啊&#xff0c;怎么为2呢&#xff1f;按照我们曾经的理解&#xff0c;其实知道符号/其实是取整。但它究竟是如何取整呢&#xff1f; 二.四种取整方案 1.…

小啊呜产品读书笔记001:《邱岳的产品手记-16》第30讲产品案例分析:Primer的扑克牌交互 第31讲 产品分析的套路(下):如何出解决方案?

小啊呜产品读书笔记001&#xff1a;《邱岳的产品手记-16》第30讲产品案例分析&#xff1a;Primer的扑克牌交互 & 第31讲 产品分析的套路&#xff08;下&#xff09;&#xff1a;如何出解决方案&#xff1f;一、今日阅读计划二、泛读&知识摘录1、第30讲产品案例分析&…