Vue3快速上手(八) toRefs和toRef的用法

顾名思义,toRef 就是将其转换为ref的一种实现。详细请看:

一、toRef

1.1 示例

ts 复制代码
<script lang='ts' setup name="toRefsAndtoRef">
// 引入reactive,toRef
import { reactive, toRef } from 'vue'
// reactive包裹的数据即为响应式对象
let person = reactive(
    {
        name: "李四",
        age: 99
    }
)
function updatePerson() {
    let name = toRef(person, 'name')
    console.log(name);
    console.log(name.value);
    console.log(person.name);
    // 实际修改数据
    name.value += '@'
}

</script>

1.2 解释

toRef就相当于是将对象Person里的某个属性,如name,单独解构赋值给name,并使得name同为响应式对象。且修改name的值时,person.name的值随之变化。

如下图可以看到:

1、name是一个ObjectRefImpl对象的实例。

2、底层还是个Proxy(Object)

3、name的值和person.name的值是一起变化的。

1.3 页面效果

二、toRefs

理解了toRef之后,再理解toRefs就相当容易了。

无非是1和n的区别。

2.1 示例

ts 复制代码
<script lang='ts' setup name="toRefsAndtoRef">
// 引入reactive,toRefs
import { reactive, toRefs } from 'vue'
// reactive包裹的数据即为响应式对象
let person = reactive(
    {
        name: "李四",
        age: 99
    }
)
function updatePerson() {
    let {name, age} = toRefs(person)
    console.log(name);
    console.log(name.value, age.value);
    // 修改数据
    name.value += '@'
    age.value += 1
    console.log('name: ',name.value);
    console.log('person.name: ', person.name);
}

</script>

2.2 解释

toRefs就相当于是将对象Person里的所有属性,一起解构赋值给name,并使得name同为响应式对象。且修改name的值时,person.name的值随之变化。

如下图可以看到:

1、各个属性都是一个ObjectRefImpl对象的实例。

2、底层还是个Proxy(Object)

3、解构出的变量的值和对象里属性的值是一起变化的。

2.3 页面效果

END

相关推荐
qq_124987075319 小时前
基于SpringBoot+vue的小黄蜂外卖平台(源码+论文+部署+安装)
java·开发语言·vue.js·spring boot·后端·mysql·毕业设计
好好好明天会更好19 小时前
uniapp项目中视频播放控制对象
前端·vue.js
萌狼蓝天20 小时前
[Vue2]项目中 vue-draggable-resizable 列宽拖动问题修复(首次拖动列宽突然变得很小)
前端·javascript·vue.js·前端框架·ecmascript
带带弟弟学爬虫__20 小时前
ks安卓—did注册
前端·javascript·vue.js·python·网络爬虫
徐小夕@趣谈前端20 小时前
LuckyFlow:用Vue3实现的一款AI可视化工作流编辑器
vue.js·人工智能·编辑器
小旭@20 小时前
vue3官方文档巩固
前端·javascript·vue.js
美自坚韧21 小时前
qiankun微前端
前端·vue.js
小王码农记21 小时前
vue2中table插槽新语法 v-slot
前端·vue.js
Apeng_09191 天前
vue实现页面不断插入内容并且自动滚动功能
前端·javascript·vue.js
苹果电脑的鑫鑫1 天前
el-select下拉菜单如何可以手输入内容
前端·vue.js·elementui