当前位置: 首页 > 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封装的)非普通对象
  • 注意:不创造响应式,而是延续响应式
http://www.lryc.cn/news/404183.html

相关文章:

  • 【linux】kernel-trace
  • 【Golang 面试基础题】每日 5 题(一)
  • ETCD介绍以及Go语言中使用ETCD详解
  • 03-用户画像+Elasticsearch
  • 初学Mybatis之搭建项目环境
  • JMeter使用小功能-(持续更新)
  • 科研绘图系列:R语言火山图(volcano plot)
  • docker firewalld 防火墙设置
  • 《问题004:报错-JS问题-unknown: Invalid shorthand property initializer.》
  • 什么是 MLPerf?
  • 【SpringBoot】第3章 SpringBoot的系统配置
  • ELK日志分析系统部署文档
  • ue5笔记
  • TCP重传机制详解
  • 如何使用javascript将商品添加到购物车?
  • 【MySQL】:想学好数据库,不知道这些还想咋学
  • 1.关于linux的命令
  • 【人工智能】机器学习 -- 决策树(乳腺肿瘤数)
  • 【proteus经典实战】LCD滚动显示汉字
  • 数据结构复习1
  • 订单管理系统需求规范
  • swiftui使用ScrollView实现左右滑动和上下滑动的效果,仿小红书页面
  • 深入理解并使用 MySQL 的 SUBSTRING_INDEX 函数
  • elementUI在手机端使用遇到的问题总结
  • 【初阶数据结构】5.栈和队列
  • 高通Android 12 设置Global属性为null问题
  • Xcode代码静态分析:构建无缺陷代码的秘诀
  • Qt各个版本安装的保姆级教程
  • 数学建模--优劣解距离法TOPSIS
  • Springboot开发之 Excel 处理工具(三) -- EasyPoi 简介