【vue3学习笔记】自定义hook;toRef与toRefs

news2024/11/27 8:29:19

尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通

课程 P156节 《自定义hook》笔记:

在这里插入图片描述

实现一个鼠标“打点”功能:
注意点:
(1)组件卸载时需要接触window上的事件绑定,否则组件卸载后window上绑定的事件还在生效;
(2)removeEventListener 解除绑定事件时,第二个参数需要与 addEventListener 添加绑定事件时传入的事件函数为同一个函数
在这里插入图片描述

将鼠标打点相关的数据、方法、生命周期钩子等逻辑单独放到 hooks 目录下的一个文件 usePoint.js 中,以暴露一个方法的形式实现相关功能。hooks中的文件命名通常用 useXxx 的形式。
此处需要注意,在 usePoint.js 中需要将数据或结果return出去:

在这里插入图片描述

在需要使用打点功能的组件中,引入 usePoint 这个hook,执行其中暴露出来的方法并接收其返回的数据,在模板中使用:

在这里插入图片描述

在另一个组件中使用usePoint封装的打点功能:

在这里插入图片描述
可以看出,hooks 的方式实现了在vue3中的逻辑复用,相当于vue2中的mixin。

课程 P157节 《toRef与toRefs》笔记

在这里插入图片描述
写一个展示数据、修改数据的例子:
在这里插入图片描述
模板中频繁使用 person. 的形式读取属性值比较繁琐,由于return里交出去的是person对象,所以想到是不是可以把模板中用到的person的属性直接交出去,以便模板中直接使用:
在这里插入图片描述
但此时发现,页面初次展示数据没问题,但修改数据时没有反应,数据丢了响应式。
在这里插入图片描述

模拟vue3的响应式,此时修改p的属性会监测到修改;而修改变量name的值则不会,因为name就是一个字符串,且和对象p没有任何关联:

在这里插入图片描述

在这里插入图片描述

用 toRef() 将响应式对象数据的其中一个属性处理成ref对象:
在这里插入图片描述

在这里插入图片描述
注意:此时读取和修改 name2.value 的值 ,读取和修改的仍旧是person.name的值,即 person.name 的值与 name2的值是同步的,关联的:
在这里插入图片描述
使用 toRef 交出数据:
在这里插入图片描述
如果使用ref交出数据,如下写法,则会存在致命性的问题:person的属性仅仅在初始化时读取和使用了一次,之后修改值时修改的不再是person的属性,而是 ref(person.name) 这个ref对象的值:
在这里插入图片描述
可见,数据分家了:
在这里插入图片描述

所以,正确的写法应该如下:
注意:在return中交出数据时,可以将一个对象整体交出,也可以将对象中的几个常用属性拆出来单独交出,方便使用,这时就需要用toRef,保持住数据的连接关系:
在这里插入图片描述
toRef 与 toRefs 的区别:toRef 只能处理一个属性,所以其用法是: toRef(对象,属性); toRefs 可以处理一个对象中的所有属性,所以只需传递一个对象参数即可,即 toRefs(对象)

在这里插入图片描述

打印出来是这样的:

在这里插入图片描述
在这里插入图片描述

那么是这样写么?
在这里插入图片描述
结果告诉我们:在这里插入图片描述
因为 toRefs(person) 返回的是一个对象,不能直接在 return 的对象中直接再嵌套写一个对象,需要用 … 展开运算符将 toRefs(person) 返回的对象的每组属性值解包到return的对象中:

在这里插入图片描述
此时发现salary没有正常展示:
在这里插入图片描述
因为 toRefs 解析的只是对象的第一层,想拿到salary需要逐层获取:

在这里插入图片描述

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

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

相关文章

R语言学习case10:ggplot基础画图Parallel Coordinate Plot 平行坐标图

step1: 导入ggplot2库文件 library(ggplot2)step2&#xff1a;带入自带的iris数据集 iris <- datasets::irisstep3&#xff1a;查看数据信息 dim(iris)维度为 [150,5] head(iris)查看数据前6行的信息 step4&#xff1a;利用ggplot工具包绘图 plot5 <- ggparcoord(…

mac如何实现升级node版本、切换node版本

一、 查看node所有版本&#xff08;前提:安装了nodejs&#xff09; npm view node versions二、安装指定node版本 sudo n 版本号三、检查目前安装了哪些版本的node&#xff0c;会出现已安装的node版本 n四、切换已安装的node版本 sudo n 版本号其他命令 1、sudo npm cache…

ChatGPT之制作短视频

引言 今天带来了如何使用 ChatGPT和剪映来制作简单的短视频教程&#xff0c;在这其中 ChatGPT的作用主要是帮我们生成文案&#xff0c;剪映的功能就是根据文案自动生成视频&#xff0c;并配上一些图片、动画、字幕和解说。 ChatGPT生成文案 首先&#xff0c;我们需要使用提示…

Open CASCADE学习|拉伸

目录 1、沿方向拉伸 2、沿路径拉伸 3、变形拉伸 1、沿方向拉伸 #include <Geom_CylindricalSurface.hxx> #include <gp_Ax3.hxx> #include <GeomAPI_Interpolate.hxx> #include <BRepAdaptor_Curve.hxx> #include <BRepBuilderAPI_MakeEdge.hxx&…

挖矿系列:细说Python、conda 和 pip 之间的关系

继续挖矿&#xff0c;挖金矿&#xff01; 1. Python、conda 和 pip Python、conda 和 pip 是在现代数据科学和软件开发中常用的工具&#xff0c;它们各自有不同的作用&#xff0c;但相互之间存在密切的关系&#xff1a; Python&#xff1a;是一种解释型、面向对象的高级程序设…

Jenkins升级后,构建任务配置界面重复错位

最近我把公司的Jenkins服务升级到了最新版本&#xff0c;升级完成后&#xff0c;点了一下构建任务&#xff0c;发现能够构建成功&#xff0c;就以为顺利完成升级了&#xff0c;下班走了&#xff0c;结果第二天&#xff0c;进入构建任务配置界面发现&#xff0c;界面一团乱麻&am…

Django的web框架Django Rest_Framework精讲(四)

文章目录 1.DRF认证组件Authentication2.权限Permissions3.限流Throttling4.过滤Filtering5.排序6.分页Pagination7.异常处理 Exceptions8.自动生成接口文档 大家好&#xff0c;我是景天&#xff0c;今天我们继续DRF的最后一讲&#xff0c;Django的web框架Django Rest_Framewor…

边缘计算网关在智能制造中有哪些应用?-天拓四方

在智能制造和工业生产环境中&#xff0c;数据已经成为新的生产要素&#xff0c;工业生产对实时性、灵活性和智能化也提出了更高的要求。而在这个过程中&#xff0c;边缘计算网关发挥着不可或缺的作用。它作为设备层与网络层之间的关键桥梁&#xff0c;确保了数据的实时、高效处…

Unity3d Cinemachine篇(六)— TargetGroup

文章目录 前言使用TargetGroup追随多个模型1. 创建二个游戏物体2. 创建TargetGroup相机3. 设置相机4. 完成 前言 上一期我们简单的使用了ClearShot相机&#xff0c;这次我们来使用一下TargetGroup 使用TargetGroup追随多个模型 1. 创建二个游戏物体 2. 创建TargetGroup相机 3…

自学Java的第十九天

一&#xff0c;每日收获 1.排序 2.冒泡排序法 3.查找 4.多维数组-二维数组 二&#xff0c;新名词与小技巧 三&#xff0c;今天学习中所遇到的困难 一&#xff0c;每日收获 1.排序 ① 排序的介绍 排序是将多个数据&#xff0c;依指定的顺序进行排列的过程。 ② 排序的…

kafka客户端生产者消费者kafka可视化工具(可生产和消费消息)

点击下载《kafka客户端生产者消费者kafka可视化工具&#xff08;可生产和消费消息&#xff09;》 1. 前言 因在工作中经常有用到kafka做消息的收发&#xff0c;每次调试过程中&#xff0c;经常需要查看接收的消息内容以及人为发送消息&#xff0c;从网上搜寻了一下&#xff0…

设计一个可以智能训练神经网络的流程

设计一个可以智能训练神经网络的流程,需要考虑以下几个关键步骤: 初始化参数:设定初始的batch size和learning rate,以及其他的神经网络参数。训练循环:开始训练过程,每次迭代更新网络的权重。监控loss:在每个训练周期(epoch)后,监控loss的变化情况。动态调整:根据l…

redis大数据统计之hyperloglog,GEO,Bitmap

目录 一、亿级系统常见的四中统计 1、聚合统计 2、排序统计 3、二值统计 4、基数统计 二、hyperloglog 去重的方式有哪些&#xff1f; hyperloglog实战演示 1、技术选型 2、代码演示 三、GEO GEO实战演示 四、Bitmap 一、亿级系统常见的四中统计 1、聚合统计 聚…

服务器和云计算之间有什么关系?

云计算与服务器之间的关系是密切而复杂的。首先&#xff0c;我们需要明确一点&#xff0c;云计算并不是一种全新的技术&#xff0c;而是对现有技术的一种整合和改进。在这个基础上&#xff0c;我们可以更好地理解云计算与服务器之间的关系。 服务器是云计算的重要组成部分之一…

SpringCloud-生产者和消费者

一、生产者和消费者的定义 在 Spring Cloud 中&#xff0c;术语 "生产者" 和 "消费者" 用于描述微服务架构中的两种基本角色。 角色定义生产者 Provider生产者是提供具体服务或功能的模块。它将业务逻辑封装成服务&#xff0c;供其他模块调用。生产者向服…

线性表 —— 数组、栈、队、链表

本文以 typescript 实现数据结构&#xff0c;虽说是 ts 实现&#xff0c;但更准确说是面向对象的方式实现&#xff0c;因此可以无缝切换成 Java 等面向对象语言。 什么是数据结构&#xff08;Data Structure&#xff09;&#xff1f; “数据结构是ADT&#xff08;抽象数据类型…

一文学会Axios的使用

异步请求 同步发送请求过程如下 浏览器页面在发送请求给服务器&#xff0c;在服务器处理请求的过程中&#xff0c;浏览器页面不能做其他的操作。只能等到服务器响应结束后才能&#xff0c;浏览器页面才能继续做其他的操作。 异步发送请求过程如下浏览器页面发送请求给服务器&…

蓝桥杯第八届省赛题笔记------基于单片机的电子钟程序设计与调试

题目要求&#xff1a; 一、基本要求 1.1 使用 CT107D 单片机竞赛板&#xff0c;完成“电子钟”功能的程序设计与调试&#xff1b; 1.2 设计与调试过程中&#xff0c;可参考组委会提供的“资源数据包”&#xff1b; 1.3 Keil 工程文件以准考证号命名&#xff0c;保存在…

032-安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

032-安全开发-JavaEE应用&Servlet路由技术&JDBC&Mybatis数据库&生命周期 #知识点&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis 演示案例&#xff1a; ➢JavaEE-HTTP-Servlet&路由&周期 ➢JavaEE-数据库-JDBC&Mybat…

MiniCPM:揭示端侧大语言模型的无限潜力

技术博客链接&#xff1a; &#x1f517;https://shengdinghu.notion.site/MiniCPM ➤ Github地址&#xff1a; &#x1f517;https://github.com/OpenBMB/MiniCPM ➤ Hugging Face地址&#xff1a; &#x1f517;https://huggingface.co/openbmb/MiniCPM-2B-sft-bf16 1 …