Vue3的ref、reactive、toRefs、toRef响应式
首先:ref和reactive都是用来声明响应式数据的。
他们的区别在于,ref用于声明基本数据类型,而reactive用于声明引用类型数据,虽然reactive也是可以传递基础数据类型,但数据类型不会被包装成响应式数据
以下代码为reactive的基本使用:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<script setup lang="ts" >
let obj1 = {
name: "张三",
age: 20,
obj: {
name: "obj",
subObj: {
name: "subObj",
},
},
};
// reactive返回的响应式数据本质是Proxy对象,对象里面每一层都会被包装成Proxy对象
let obj = reactive(obj1);
console.log(obj, obj.obj, obj.obj.subObj);
</script>
以下代码为ref的基本使用:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
<script setup lang="ts" >
let num = ref(0)
console.log(num.value)
</script>
PS:注意通过ref声明的变量,所以js要修改对应的值是要通过.value访问才可以,template模板不需要通过.value访问
toRefs 和 toRef 不会创造响应式,而是会延续响应式
let { name } = toRefs({ name: "你好" });//此处的toRefs中的参数并非响应式数据
let { age } = toRefs(obj);//此处的toRefs中的参数是响应式数据
当toRefs的参数并非响应式数据时,其解构出来的数据并非响应式数据,只有参数为响应式数据时,其解构出来的数据才会是响应式数据,toRef同理。
<script setup lang="ts">
const obj = reactive({
name: "张三",
age: 12,
});
let obj1 = reactive(obj);
//toRef有两个参数,第一个参数类型必须是object,第二个参数则是对象中的属性名
let name = toRef(obj1, "name");
let age = toRef(obj1, "age");
</script>
Ps:
toRef ⽤于为源响应式对象上的属性新建⼀个ref,从⽽保持对其源对象属性的响应式连接。
接收两个参数:源响应式对象和属性名,返回⼀个ref数据。
toRefs ⽤于将响应式对象转换为结果对象,其中结果对象的每个属性都是指向原始对象相应属性的ref。
常⽤于es6的解构赋值操作,因为在对⼀个响应式对象直接解构时解构后的数据将不再有响应式,⽽使⽤toRefs可以⽅便解决这⼀问题。
本文来自博客园,作者:PYK_XG,转载请注明原文链接:https://www.cnblogs.com/pyk55cc/p/16200249.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!