Vue3中ref和toRef的区别
1. ref是复制,视图会更新
如果利用ref将某一个对象中的某一个属性值变成响应式数据
我们修改响应式数据是不会影响原始数据的;
同时视图会跟新。
ref就是复制 复制是不会影响原始数据的
<template>
<div>
<div>
<div>{{stateObj}}</div>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import {ref} from 'vue'
export default {
name: 'App',
setup(){
let obj={name:"张三",age:22}
//将对象中的某一个属性
//变成响应式数据
//而不是将对象变成响应式数据
let stateObj=ref(obj.name)
function func1(){
stateObj.value="张三变成李四";
//原始数据没有发生改变 原始数据obj {name: "张三", age: 22}
console.log("原始数据obj",obj)
//响应式数据发生改变了
/**
响应式stateObj RefImpl {
_rawValue: "张三变成李四", _shallow: false,
__v_isRef: true, _value: "张三变成李四"
}
**/
//变成了一个ref的对象
console.log("响应式stateObj",stateObj)
}
return {stateObj,func1}
},
}
</script>
2.toRef是引用,视图不跟新
如果利用toRef将某一个对象中的属性变成了响应式的数据
我们修改响应式的数据是会影响原始数据的
如果数据是通过toRef创建的,修改值后,数据不会触发视图
toRef是引用;它引用的是以前那个对象中的属性
所以你修改后,会影响到原始数据终中的值
<template>
<div>
<div>
<div>{{state}}</div>
<button @click="func1">按钮</button>
</div>
</div>
</template>
<script>
import {toRef} from 'vue'
export default {
name: 'App',
setup(){
let obj={name:"张三",age:22}
//将对象中的某一个属性name变成响应式数据
//而不是将对象变成响应式数据
let state=toRef(obj, 'name');
console.log('toRef',state)
function func1(){
state.value="我是李四";
console.log('obj',obj)
console.log('state',state)
}
return {state,func1}
},
}
</script>
3.结论
ref复制, 修改响应式数据,不会影响以前的数据,界面会更改。
toRef引用, 修改响应式的数据,会影响以前的数据,界面不会更新。
toRef的使用场景
如果想让响应式数据和原始数据关联起来。
并且更新响应式数据后,不想视图更新;那么就可以使用toRef
Vue3中ref和toRef的区别的更多相关文章
- C#中ref和out的区别浅析
这篇文章主要介绍了C#中ref和out的区别浅析,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢,需要的朋友可以参考下 在C#中通过使用方法来获取返回值时,通 ...
- 浅谈C#中ref与out的区别
在C#这门高级语言中,你是否注意过ref与out的用法?你是否为在调用方法时需要多个返回值呢?不用急,接下来,我们去一起去研究一下这个问题... 其实呢,C#语言中,参数的传递一共有两种方法,值传递和 ...
- 认真总结Vue3中ref与reactive区别和isRef与isReactive 类型判断
1.什么是ref? 1.ref和reactive-样 也是用来实现响应式数据的方法 由于reactive必须传递一个对象, 所以导致在企业开发中如果我们只想让某个变量实现响应式的时候会非常麻烦 所以V ...
- .net 中 ref out params的区别
C#中有三个关键字-ref,out ,params,虽然本人不喜欢这三个关键字,因为它们疑似破坏面向对象特性.但是既然m$把融入在c#体系中,那么我们就来认识一下参数修饰符ref,out ,param ...
- C#中REF和OUT的区别
在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功 ...
- C# 中ref与out关键字区别
ref 关键字通过引用传递的参数的内存地址,而不是值.简单点说就是在方法中对参数的任何改变都会改变调用方的基础参数中.代码举例: class RefExample { static void Meth ...
- 2015.4.16-C#中ref和out的区别
如图: 输出结果是: 上面显示的是 ref 只是地址传递,所以最初改变的也只是地址,但是如果 在给其赋值,值会随之改变;如果 在方法内直接赋值,那么输出的结果 就是现在的值,之后 ...
- property中ref、value、name的区别
转载: 版权声明:本文为CSDN博主「qq_36098284」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net ...
- Vue3全家桶升级指南二ref、toRef、toRefs的区别
ref是对原始数据的拷贝,当修改ref数据时,模板中的视图会发生改变,但是原始数据并不会改变. toRef是对原始数据的引用,修改toRef数据时,原始数据也会发生改变,但是视图并不会更新. 在vue ...
- vue3 的 ref、isRef、toRef、toRefs、toRaw 详细介绍
ref.isRef.toRef.toRefs.toRaw 看着一堆类似的东西,一个头两个大,今天整理一篇文章详细介绍它们的功能及区别. 1.ref ref 属性除了能够获取元素外,也可以使用 ref ...
随机推荐
- Python 的 sum():Pythonic 的求和方法
摘要:Python 的内置函数sum()是一种对数值列表求和的有效且Pythonic 的方法.将多个数字相加是许多计算中常见的中间步骤,因此sum()对于 Python 程序员来说是一个非常方便的工具 ...
- 使用阿里云镜像安装 Docker 服务
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE.社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器. ...
- QA: Solon 怎么输出下载文件流?
Solon 的Mvc可以直接返回 DownloadedFile 或者 File 对象 @Mapping("/demo/down") @Controller public class ...
- c#-微软2
练习-编写第一个代码: 在第一次练习中你将使用c#将神圣的程序员用语打印到控制台的标准输出 编写第一行代码: 在软件开发者中,有这么一个传统,那就是将"Hello World!"这 ...
- 备忘 springboot 整合ehcache,注入CacheManager时提示 required a bean of type 'org.springframework.cache.CacheManager' that could not be found
问题因人而异,此处仅做备忘 整合过程: 1.添加maven依赖 <dependency> <groupId>net.sf.ehcache</groupId> < ...
- Educational Codeforces Round 100 (Rated for Div. 2) 简单记录
最近在写Web大作业和期末复习,可能还会有一段时间不会更新blog了 1463A. Dungeon 题意:有3个血量为a,b,c的敌人,现在你每7发子弹能进行一次范围AOE攻击(即一次能集中三人),每 ...
- 特色国风数字孪生智慧大坝 3D 可视化
前言 水利兴,五谷丰.水利作为国民经济稳定和谐的重要部分,不仅有防洪减灾.农业灌溉.城市供水调水.渔业外贸.旅游航运.生态环境等综合应用,水电资源也是至关重要的可持续能源之一.大坝与水库.水电站等水利 ...
- vue 3版本如何下载静态文件
1.现将静态文件放到 public 目录下的static文件夹 2.<a href="/static/test.zip" target="_blank" ...
- React报错之Property does not exist on type 'JSX.IntrinsicElements'
正文从这开始~ 总览 当组件名称以小写字母开头时,会导致"Property does not exist on type 'JSX.IntrinsicElements'"错误.为了 ...
- Go-快速排序
package main import "fmt" // 快速排序 // 特征: // 1. 选定一个数,让这个数左边的比这个数小,右边比这个数大 // 2. 然后这个基数就是已经 ...