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

如何理解ref toRef和toRefs

是什么

ref

  • 生成值类型的响应式数据
  • 可用于模板和reactive
  • 通过.value修改值
    ref也可以像vue2中的ref那样使用

toRef

  • 针对一个响应式对象(reactive)的prop
  • 创建一个ref
  • 两者保持引用关系

toRefs

  • 将响应式对象(reactive封装)转换为普通对象
  • 对象的每个prop都是对应的ref
  • 两者保持引用关系

合成函数(可以理解为hooks)返回响应式对象

最佳使用方式

  • 用reactive做对象的响应式,用ref做值类型的响应式
  • setup中返回toRefs(state),或者roRef(state, ‘xxx’)
  • ref变量命名都用xxxRef
  • 合成函数返回响应式对象时,使用toRefs

进阶,深入理解

为什么需要ref ?
  • 返回值类型,会丢失响应式
  • 如在setup、computed、合成函数,都有可能返回值类型
  • Vue如果不定义ref,用户将自造ref,反而混乱
为什么需要.value?
  • ref时一个对象(不丢失响应式),value存储值
  • 通过.value属性的get和set实现响应式
  • 用于模板、reactive时,不需要.value,其他情况都需要

比如:

// 不使用.valuefunction computed1(getter) {let ref = 0;setTimeout(() => {ref = getter}, 1500);return ref;}// 使用.valuefunction computed2(getter) {let ref = {value: null};setTimeout(() => {ref.value = getter}, 1500);return ref;}let a = computed1(() => 100); // 0 -> 0let b = computed2(() => 100); // 0 -> 100
为什么需要toRef toRefs?
  • 初衷:在不丢失响应式的情况下,把对象数据分解/扩散(解构)
  • 前提:针对的是响应式对象(reactive封装的)非普通对象
  • 注意:不创造响应式,而是延续响应式

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 问题记录-Spring Security- bean httpSecurity not found
  • HarmonyOS Web组件(二)
  • 低代码与传统编程:快速高质量构建系统的比较与方法
  • 全新UI自助图文打印系统小程序源码/自助云打印机前后端源码
  • IDEA工具中Java语言写小工具遇到的问题
  • 在RK3568上如何烧录MAC?
  • Windows 11 version 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2024)
  • flutter 充电气泡
  • 安卓系统签名的制作与使用(SignApk.jar)踩坑记录
  • 【Vue3】从零开始编写项目
  • 今日总结:雪花算法,拉取在线用户
  • 深入理解Linux网络(二):UDP接收内核探究
  • tg小程序前端-dogs前端源码分析
  • mongodb数据导出与导入
  • 【20】读感 - 架构整洁之道(二)
  • Google 是如何开发 Web 框架的
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 《剑指offer》分解让复杂问题更简单
  • 【面试系列】之二:关于js原型
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ES6系列(二)变量的解构赋值
  • JavaScript 基础知识 - 入门篇(一)
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js中forEach回调同异步问题
  • spark本地环境的搭建到运行第一个spark程序
  • SpingCloudBus整合RabbitMQ
  • 包装类对象
  • 闭包,sync使用细节
  • 来,膜拜下android roadmap,强大的执行力
  • 如何在GitHub上创建个人博客
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • #13 yum、编译安装与sed命令的使用
  • #HarmonyOS:基础语法
  • #每天一道面试题# 什么是MySQL的回表查询
  • (PADS学习)第二章:原理图绘制 第一部分
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原創) 未来三学期想要修的课 (日記)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)可以带来幸福的一本书
  • ***详解账号泄露:全球约1亿用户已泄露
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .dwp和.webpart的区别
  • .net core Swagger 过滤部分Api
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET简谈设计模式之(单件模式)
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • // an array of int