当前位置: 首页 > article >正文

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

尚硅谷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.kler.cn/a/229016.html

相关文章:

  • pandoc + wkhtmltox 批量转换Markdown文件为PDF文件
  • GPT-5 传言:一场正在幕后发生的 AI 变革
  • 彻底理解JVM类加载机制
  • python如何解析word文件格式(.docx)
  • 文件操作:系统IO
  • Python操作Excel——openpyxl使用笔记(3)
  • LNMP.
  • 挂耳式耳机什么牌子的好?年度最值得入手的挂耳式耳机推荐
  • 使用Mobx时,在组件使用时数据类型为Proxy
  • Linux|Grep 命令的 12 个实用示例
  • 使用SPM_batch进行批量跑脚本(matlab.m)
  • 7.0 Zookeeper 客户端基础命令使用
  • Coil:Android上基于Kotlin协程的超级图片加载库
  • 想上岸?有这个神器足矣!
  • SpringMVC精简知识点
  • JAVA字节流的两个重要子类FileOutputStream、FileInputStream
  • 292.Nim游戏
  • React16源码: React中event事件监听绑定的源码实现
  • undefined symbol: _ZN5boost15program_options22error_with_option
  • 类银河恶魔城学习记录1-6 Flip基本设置源代码 P33
  • 网络原理TCP/IP(5)
  • ensp实验合集(二)
  • 创建自己的Hexo博客
  • 第8章 多线程
  • Postgresql体系结构
  • 【PTA函数题】6-2 约瑟夫环之循环链表