ref是对原始数据的拷贝,当修改ref数据时,模板中的视图会发生改变,但是原始数据并不会改变。

toRef是对原始数据的引用,修改toRef数据时,原始数据也会发生改变,但是视图并不会更新。

在vue3中定义一个基础类型的响应式数据一般使用ref,定义一个引用类型的响应式数据一般使用reactive。

import {ref,reactive} from "vue"
export default {
setup(){
let num=ref(0)
let obj=reactive({name:'张三',age:18})
return {num,obj}
}
}

这样在模板中使用的时候,就可以直接通过{{num}},{{obj.name}},{{obj.age}}获取数据了。

基础类型的数据没有问题,但是引用类型的值在模板中这样写就比较累赘了,我们也可以直接解构出来,在模板中就可以直接使用{{name}}和{{age}}了。

import {ref,reactive} from "vue"
export default {
setup(){
let num=ref(0)
let obj=reactive({name:'张三',age:18})
let {name,age}=obj
return {num,name,age}
}
}

toRef是将对象中的某个值转化为响应式数据 toRef(obj,key)

import {toRef} from "vue"
export default {
setup() {
let obj = { name: '张三', age: 18 };
let newObj = toRef(obj, 'name');
setTimeout(() => {
newObj.value = '李四';
console.log(obj, newObj); //obj中的name和newObj都变成李四了,但是视图显示还是张三,不会变化
}, 2000);
return { obj, newObj };
},
};
</script>

toRef是对原始数据的引用,修改toRef数据时,原始数据也会发生改变,但是视图并不会更新。

toRefs是将整个对象转化成响应式数据 toRefs(obj)

import {toRefs} from "vue"
export default {
let obj = { name: '张三', age: 18 };
let newObj = toRefs(obj);
setTimeout(() => {
newObj.name.value = '李四';
console.log(obj, newObj);
}, 2000);
return { obj, newObj };
}

需要注意的是,按照上面这种写法,在模板中使用的时候,需要按照这种方式 {{newObj.name.value}}(不太理解),如果想直接使用{{name}},那么在setup中return的时候需要解构下

import {toRefs} from "vue"
export default {
let obj = { name: '张三', age: 18 };
let newObj = toRefs(obj);
setTimeout(() => {
newObj.name.value = '李四';
console.log(obj, newObj);
}, 2000);
return { obj, ...newObj };
}

这样在模板中就可以直接通过{{name}}来获取了。

小结一下

1、ref是对元数据的拷贝,修改响应式数据时不会影响之前的数据,视图会更新

2、toRef和toRefs是对元数据的引用,修改响应式数据时,元数据也会改变,但是视图不会更新,toRef修改的是对象的某个属性,toRefs修改的是整个对象

3、toRefs的使用场景:如果想让响应式数据和原来的数据关联起来同步更新,并且不更新视图,那么就可以使用toRefs

Vue3全家桶升级指南二ref、toRef、toRefs的区别的更多相关文章

  1. Vue3全家桶升级指南一composition API

    1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...

  2. 助你上手Vue3全家桶之Vue3教程

    目录 前言 1,setup 1.1,返回值 1.2,注意点 1.3,语法 1.4,setup的参数 2,ref 创建响应式数据 3,reactive 创建响应式数据 4,computed 计算属性 5 ...

  3. 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目

    1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...

  4. 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)

    vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快.vite 随 vue3 正式版一起发布,刚开始的时候与 vue 绑定在一起 ...

  5. 助你上手Vue3全家桶之Vue-Router4教程

    目录 1,前言 1,Router 2.1,跳转 2.2,打开新页面 3,Route 4,守卫 4.1,onBeforeRouteLeave 4.2,onBeforeRouteUpdate 4.3,路由 ...

  6. 助你上手Vue3全家桶之VueX4教程

    目录 1,前言 2,State 2.1,直接使用 2.2,结合computed 3,Getter 3.1,直接使用 3.2,结合computed 4,Mutation 4.1,直接使用 4.2,结合c ...

  7. vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇

    在<基于 vite 创建 vue3 全家桶>一文整合了 Element Plus,并将 Element Plus 中提供的图标进行全局注册,这样可以很方便的延续 Element UI 的风 ...

  8. 手把手教你全家桶之React(二)

    前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用. 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新.并而不 ...

  9. EOS基础全家桶(十二)智能合约IDE-VSCode

    简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...

随机推荐

  1. Ansible_使用jinja2模板部署自定义文件

    一.jinja2简介 1.jinja2模板 1️⃣:Ansible将jinja2模板系统用于模板文件,Ansible还使用jinja2语法来引用playbook中的变量 2️⃣:变量和逻辑表达式置于标 ...

  2. 021.Python的内置函数

    内置函数 1 abs 绝对值函数 res = abs(-9.9867) print(res) 执行 [root@node10 python]# python3 test.py 9.9867 2 rou ...

  3. STM32F7系列时钟相关问题:HSE模式配置(旁路模式、非旁路模式

    从时钟源的角度,分为两类外部时钟(E)和内部时钟(I).从时钟速率的角度,分为两类高速时钟(HS)和低速时钟(LS).而把它们组合起来就有四种时钟:HSE.HIS.LSE.LSI.至于为什么会有这么复 ...

  4. pika详解(四) channel 通道

    pika详解(四) channel 通道   本文链接:https://blog.csdn.net/comprel/article/details/94662394 版权 ​ channel通道 通道 ...

  5. Step By Step(Lua编译执行与错误)

    Step By Step(Lua编译执行与错误) 1. 编译:    Lua中提供了dofile函数,它是一种内置的操作,用于运行Lua代码块.但实际上dofile只是一个辅助函数,loadfile才 ...

  6. Go语言协程并发---select多路复用应用

    package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...

  7. Jmeter- 笔记8 - 分布式

    分布式: 原因:在实际工作中,jmeter可能需要虚拟上千并发用户,而每台实际能虚拟的线程数时有限的,一般一台电脑小于2000个,1.5k - 2k可能就出现无法虚拟. 多台机器,一起虚拟并发用户数, ...

  8. 《MySQL面试小抄》索引考点一面总结

    <MySQL面试小抄>索引考点一面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟 囧囧表示:面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!! ...

  9. postman环境变量配置的详细过程(步骤加截图)

    环境变量的配置 实战:https://www.baidu.com/s?wd=博客园 使用cmd命令模式输入代码:Nslookup www.baidu.com 模拟环境:线上环境14.215.177.3 ...

  10. win10下abd环境配置

    一.下载安装 Android SDK 下载地址: http://tools.android-studio.org/index.php/sdk 下载完成后进行解压至D盘根目录下,也可以自定义英文路径下 ...