vue3.5系列之响应式props解构的几点技巧对比

在最新的版本3.5x中,对props的能力也进行了加强。下面,我们具体看下有哪些变化,给我们带来的新的体验!

体验一

  • 3.5之前解构props的效果
// 子组件
<template><div><h1>响应式props</h1><p>{{ count }}</p></div>
</template><script setup>
import { watch, watchEffect } from "vue";
const { count } = defineProps(["count"]);watchEffect(() => {console.log("count", count);
});
watch(() => count,newVal => {console.log("count", newVal);}
);
</script>
// 父组件
<template><div><ChildProps :count="count" /><button @click="count++">Click me</button></div>
</template><script setup>
import ChildProps from "@/components/ChildProps";
import { ref } from "vue";
const count = ref(0);
</script>

请添加图片描述

  • 代码解析
    • 子组件解构父组件传来的count数据,在子组件中是无法watchcount的更新的,如上图
    • 同样的代码,只需更换vue版本到3.5,监听就会生效了,如下图请添加图片描述
    • 解析出来的count,在进行watch时,不能直接传count,要用对应的get
    • 反例:这并不会按预期工作,因为它等价于 watch(props.foo, ...)——我们给 watch 传递的是一个值而不是响应式数据源。实际上,Vue 的编译器会捕捉这种情况并发出警告。
    watch(count, /* ... */)
    

请添加图片描述

体验二

将我们结构出来的props属性,传给自定义的hooks,保持数据的响应性,那怎么做?

  • 实现效果
    请添加图片描述
  • 代码实现
// 自定义hooks
import { toValue, ref, watchEffect } from "vue";
export function useCountAdd(num) {let computedCount = ref(0);watchEffect(() => {computedCount.value = toValue(num) + 1;});return computedCount;
}
  • 父组件
<template><div><h1>响应式props</h1><p>{{ count }}</p><p>{{ newCount }}</p></div>
</template><script setup>
import { useCountAdd } from "@/hooks/useCount";const { count } = defineProps(["count"]);// (1)
const newCount = useCountAdd(count);
</script>

(1):如果直接传递解构出来的count,我们的页面是不能及时响应更新的。
请添加图片描述

正例:

const newCount = useCountAdd(() => count);

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux工具的使用——yum和vim的理解和使用

目录 linux工具的使用1.linux软件包管理器yum1.1yum的背景了解关于yum的拓展 1.2yum的使用 2.Linux编辑器-vim使用2.1vim的基本概念2.2vim的基本操作2.3命令模式命令集2.3.1关于光标的命令&#xff1a;2.3.2关于复制粘贴的命令2.3.3关于删除的命令2.3.4关于文本编辑的命令 2.4插…

ElasticSearch备考 -- Update by query Reindex

一、题目 有个索引task&#xff0c;里面的文档长这样 现在需要添加一个字段all&#xff0c;这个字段的值是以下 a、b、c、d字段的值连在一起 二、思考 需要把四个字段拼接到一起&#xff0c;组成一个新的字段&#xff0c;这个就需要脚本&#xff0c; 这里有两种方案&#xff…

Python进阶--正则表达式

目录 1. 基础匹配 2. 元字符匹配 1. 基础匹配 正则表达式&#xff0c;又称规则表达式&#xff08;Regular Expression&#xff09;&#xff0c;是使用单个字符串来描述、匹配某个句法规则的字符串&#xff0c;常被用来检索、替换那些符合某个模式&#xff08;规则&#xff…

zotero使用koofr+google drive/onedrive同步

最早了解到这个思路是来自 知乎-【从零开始使用Zotero】(3) Zotero文献同步方式 和 How to Sync Zotero Files Using WebDAV and Google Drive with Koofr: A Step-by-Step Guide 虽然周围很多人都在用Readpaper这种web端的了&#xff0c;但是经常逛Arxiv而且zotero的web插…

计算机网络——email

pop3拉出来 超出ASCII码范围就不让传了 这样就可以传更大的文件

与 MySQL 建立连接

命令行连接 MySQL 前面介绍了在 Windows 下安装最新版 MySQL 初始化安装步骤&#xff0c;启动 MySQL 服务&#xff0c;记录的初始密码可用于 “root” 账户登录进行相关操作&#xff0c;Windows 和 Linux 命令行操作步骤一样: 上图为 MySQL 的初始密码。在 Windows 下打开 CMD …

EdgeNAT: 高效边缘检测的 Transformer

EdgeNAT: Transformer for Efficient Edge Detection 介绍了一种名为EdgeNAT的基于Transformer的边缘检测方法。 1. 背景与动机 EdgeNAT预测结果示例。(a, b):来自BSDS500的数据集的输入图像。(c, d):对应的真实标签。(e, f):由EdgeNAT检测到的边缘。(e)显示了由于颜色变化…

小学期中考试老师怎么发成绩

随着期中考试的落幕&#xff0c;老师们面临着一项既耗时又易出错的任务——发布成绩。传统的手动统计和通知方式不仅效率低下&#xff0c;还容易出错。现在&#xff0c;有了一种新的在线平台&#xff0c;可以帮助老师们简化这一流程。 这个平台叫做“易查分”&#xff0c;它是一…

【LLM】Agent在智能客服的实践(AI agent、记忆、快捷回复 | ReAct)

note 内容概况&#xff1a;结合京粉app学习agent的实践 Agent架构&#xff1a;通过模型训练提升LLM识别工具的准确性&#xff1b;设计可扩展并安全可控的agent架构扩展业务能力。记忆&#xff1a;多轮对话应用中如何组织、存储和检索记忆来提升大模型对用户的理解。快捷回复&…

Prescan中的缓和曲线道路spiral road

我主要是针对城市道路作设计&#xff0c;所以主要依据参考&#xff1a;城市道路工程设计规范 CJJ37 -2012 城市道路工程设计规范CJJ37-2012(2016年版) (soujianzhu.cn) 道路的平面线形主要包括直线和平曲线两种形式。直线的几何形状相对固定&#xff0c;缺乏灵活性&#xff0…

水深探测仪的作用和使用方法

在水域救援的行动里&#xff0c;救援人员时刻面临着复杂多变、充满未知的水域状况。当接到救援任务奔赴现场&#xff0c;那片需要涉足的水域就像一个神秘莫测的异世界&#xff0c;挑战着所有人的认知与勇气。 水深探测仪作为一种专用于测量水域深度的设备&#xff0c;通过声波和…

用户和组管理

用户管理 用户管理包括创建用户、修改用户属性、删除用户等操作。 创建用户 使用 useradd 命令可以创建新用户。 格式&#xff1a;useradd [选项] username 步骤1&#xff1a;创建新用户 useradd tom 步骤 2: 设置用户密码 新用户创建后&#xff0c;需要设置一个密码才能…

No.15 笔记 | CSRF 跨站请求伪造

目录 一、基础知识 &#xff08;一&#xff09;cookie 和 session、同源策略 &#xff08;二&#xff09;CSRF 原理 二、CSRF 类型 &#xff08;一&#xff09;GET 类型 &#xff08;二&#xff09;POST 类型 三、CSRF 实例讲解 &#xff08;一&#xff09;真实案例 &am…

springboot如何自动生成mybatis映射文件、dao、pojo层文件?

背景&#xff1a;以前一直是直接cv一个项目中现成的xml文件&#xff0c;然后再去自己配置mapper等数据。自己准备做一个单独的例子试一下。 步骤1&#xff1a;在pom.xml文件中插入mybatis-generator插件&#xff0c;这里选的版本是1.3.2&#xff0c;然后指定的generator文件是在…

一种用于超稳激光的数字控制锁频电路

摘要 超稳激光具有超高的频率稳定度和极窄线宽等优点&#xff0c;广泛应用于各种精密测量物理实验。为了确保不引入额外开关噪声&#xff0c;其频率锁定电路通常采用模拟电路实现&#xff0c;但是模拟控制电路存在锁定参数调节不方便、难以实现自动锁定和远程控制等方面的不足。…

端口冲突的解决方案以及SpringBoot自动检测可用端口demo

端口冲突的解决方案 端口冲突通常发生在尝试运行两个或多个应用程序或服务时&#xff0c;它们尝试使用同一个端口号&#xff0c;导致系统无法正确分配资源。 各种端口错误 你是否遇到过下面这些报错信息呢&#xff1f; Windows 系统报错&#xff1a; 系统错误 1004 套接字操作…

自适应气泡小计

View 代码 <div class"mas-view"><div class"m-2"><span>新新消息消新消息消息新消息新消息新消息新消息新消息新消息新消息新消息新息</span></div></div>CSS 样式 .mas-view{width: 100%;height: auto;border: 1px…

【unity进阶知识9】序列化字典,场景,vector,color,Quaternion

文章目录 前言一、可序列化字典类普通字典简单的使用可序列化字典简单的使用 二、序列化场景三、序列化vector四、序列化color五、序列化旋转Quaternion完结 前言 自定义序列化的主要原因&#xff1a; 可读性&#xff1a;使数据结构更清晰&#xff0c;便于理解和维护。优化 I…

Kubernetes--深入理解Pod资源管理

文章目录 kubectl --helpapi-resourcesapi-versionskubectl explain ... API资源资源规范PodServiceConfigMapSecret 显示资源删除资源详细描述RESTful API Pod资源管理Pod的核心概念Pod资源配置了解Pod运行状况Kubectl get pods xxxxkubectl describe pods xxxkubectl logs -f…

数据分析:锚定手工赛道,小红书爆文内容解析

导语 高倍速增长&#xff0c;近年手工赛道趋势有目共睹&#xff0c;可谓小红书长盛不衰的内容。 相关话题常年位居热门话题榜TOP30&#xff0c;浏览量超百亿&#xff0c;话题下更是诞生了很多大爆文。小编就来带大家探索下&#xff0c;为何小红书“手工”赛道会如此火热&…