Vue3全家桶升级指南二ref、toRef、toRefs的区别
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的区别的更多相关文章
- Vue3全家桶升级指南一composition API
1.setup() vue3中的composition API中最重要的就是setup方法了,相当于组件的入口,所有的composition API都必须放到setup()中的使用. setup是在组 ...
- 助你上手Vue3全家桶之Vue3教程
目录 前言 1,setup 1.1,返回值 1.2,注意点 1.3,语法 1.4,setup的参数 2,ref 创建响应式数据 3,reactive 创建响应式数据 4,computed 计算属性 5 ...
- 开箱即用 yyg-cli(脚手架工具):快速创建 vue3 组件库和vue3 全家桶项目
1 yyg-cli 是什么 yyg-cli 是优雅哥开发的快速创建 vue3 项目的脚手架.在 npm 上发布了两个月,11月1日进行了大升级,发布 1.1.0 版本:支持创建 vue3 全家桶项目和 ...
- 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)
vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快.vite 随 vue3 正式版一起发布,刚开始的时候与 vue 绑定在一起 ...
- 助你上手Vue3全家桶之Vue-Router4教程
目录 1,前言 1,Router 2.1,跳转 2.2,打开新页面 3,Route 4,守卫 4.1,onBeforeRouteLeave 4.2,onBeforeRouteUpdate 4.3,路由 ...
- 助你上手Vue3全家桶之VueX4教程
目录 1,前言 2,State 2.1,直接使用 2.2,结合computed 3,Getter 3.1,直接使用 3.2,结合computed 4,Mutation 4.1,直接使用 4.2,结合c ...
- vue3 vite2 封装 SVG 图标组件 - 基于 vite 创建 vue3 全家桶项目续篇
在<基于 vite 创建 vue3 全家桶>一文整合了 Element Plus,并将 Element Plus 中提供的图标进行全局注册,这样可以很方便的延续 Element UI 的风 ...
- 手把手教你全家桶之React(二)
前言 上一篇已经讲了一些react的基本配置,本遍接着讲热更新以及react+redux的配置与使用. 热更新 我们在实际开发时,都有用到热更新,在修改代码后,不用每次都重启服务,而是自动更新.并而不 ...
- EOS基础全家桶(十二)智能合约IDE-VSCode
简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...
随机推荐
- 密码学系列之:memory-hard函数
密码学系列之:memory-hard函数 目录 简介 为什么需要MHF Memory hard的评估方法 MHF的种类 MHF的密码学意义 memory-hard在MHF中的应用 简介 Memory ...
- 【转载】一次「Too many open files」故障
一次「Too many open files」故障 发表于2015-08-02 昨天,项目的 ElasticSearch 服务挂了,我说的挂可不是进程没了,因为有 Supervisor 保护,而是服务 ...
- SSH自动断开连接的原因-20200323
SSH自动断开连接的原因 方法一: 用putty/SecureCRT连续3分钟左右没有输入, 就自动断开, 然后必须重新登陆, 很麻烦. 在网上查了很多资料, 发现原因有多种, 环境变量TMOUT ...
- linux系统瓶颈分析(精) CPU Memory IO Network
linux系统瓶颈分析(精) linux系统瓶颈分析(精) (2013-09-17 14:22:00) 分类: linux服务器瓶颈分析 1.0 性能监控介绍性能优化就是找到系统处理中的瓶颈以及去 ...
- 云计算OpenStack---云计算、大数据、人工智能(14)
一.互联网行业及云计算 在互联网时代,技术是推动社会发展的驱动,云计算则是一个包罗万象的技术栈集合,通过网络提供IAAS.PAAS.SAAS等资源,涵盖从数据中心底层的硬件设置到最上层客户的应用.给我 ...
- Apple iWork(Pages、Numbers、Keynote)11.0 发布
苹果今天将其专为 iOS 和 macOS 设备设计的 iWork 应用套件更新为版本 11,引入了许多新功能和改进功能. Pages 文稿. 文档高手,精美不言而喻. 进一步了解 Pages 文稿 & ...
- [Windows] 将中文输入法热键改回Ctrl+Space
造冰箱的大熊猫@cnblogs 2021/6/6 之前因为Code Composer Studio的缘故将Windows XP上的中英文切换热键从Ctrl+Space改为了Ctrl+Shift+Spa ...
- Log4j实战,依赖分析
背景 在项目中经常被log4j的各种依赖冲突搞的焦头烂额,久病成良医啊,在这里记录一下我对log4j的理解与分析 log4j 与 log4j2 log4j2是log4j的升级版,二者互不兼容,据说lo ...
- Python+Selenium - windows安全中心的弹窗(账号登录)
当出现如下图所示的 Windows安全中心弹窗,需要输入用户名和密码时 如何用Python+selenium跳过这个登录. 步骤: 1.在注册表中三个位置各添加两个东西:iexplore.exe 和 ...
- 使用Jprofiler分析Java项目的内存开销情况并利用强制回收控制内存
一.问题背景 自己开发的Java项目中占用太多的Heap Space.即使在Eclipse的虚拟机参数中设置"-Xms128m -Xms2048m -XX:MetaspaceSize=512 ...