网站首页 > 博客文章 正文
toRef / toRefs
作用
toRef 和 toRefs 可以用来复制 reactive 里面的属性然后转成 ref,而且它既保留了响应式,也保留了引用,也就是你从 reactive 复制过来的属性进行修改后,除了视图会更新,原有 ractive 里面对应的值也会跟着更新,如果你知道 浅拷贝 的话那么这个引用就很好理解了,它复制的其实就是引用 + 响应式 ref
不加 s 和 加 s 的区别就是这样:
toRef: 复制 reactive 里的单个属性并转成 ref
toRefs: 复制 reactive 里的所有属性并转成 ref
template 要想访问 toRefs 的值,需要带上 .value 如果不带上,就会出现双引号。template 要想访问 toRef 的值,不需要带上 .value
toRefs
toRefs 它可以将一个响应式对象转成普通对象,而这个普通对象的每个属性都是响应式的 ref
<template>
<div>
{{ count.a }}
{{ countAsRefs.a }}
<button @click="addCount">+1</button>
</div>
</template>
<script lang='ts' setup>
import { reactive, toRefs } from "vue"
const count = reactive({
a: 1,
b: 2
})
const countAsRefs = toRefs(count)
const addCount = () => {
countAsRefs.a.value++
}
</script>
此时代码中的countAsRefs类型为
{
a: Ref<number>,
b: Ref<number>
}
它的属性 a 和 b 都是响应式的 ref 对象,同样的它们和原对象的 count 的属性也是保持同步的
根据它的特性我们通常用它来解构一个响应式对象而不会让其失去响应式
import { reactive, toRefs } from "vue";
const count = reactive({
a: 1,
b: 2,
});
const { a, b } = toRefs(count);
此时的 a 和 b 都是一个响应式的 ref 对象,并和原对象的 a 和 b 属性保持同步
isRef()
isRef 顾名思义它是用来判断某个值是否是 ref,注意:它判断不了这个值是不是 reactive(可以使用 isReactive 判断)
import { reactive, isRef, ref } from "vue";
const count = ref(1);
const testObj = reactive({
a: 1,
});
console.log(isRef(count)); //true
console.log(isRef(testObj)); //false
猜你喜欢
- 2024-12-15 vue 3 ref、reactive
- 2024-12-15 手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】
- 2024-12-15 Vue3响应式:ref vs reactive,5分钟消除使用困惑
- 2024-12-15 Vue3为什么推荐使用ref而不是reactive
- 2024-12-15 一文搞懂Vue3中如何使用ref获取元素节点?
- 2024-12-15 70%的人都答错了的面试题,vue3的ref是如何实现响应式的?
- 2024-12-15 vue3 的 ref、isRef、toRef、toRefs、toRaw 详细介绍
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)