vue3中的ref,toRef,toRefs三个的作用使用小结

 更新时间:2022年11月11日 11:36:25   作者:有两把刷子  
Vue3中ref、reactive、toRef、toRefs都是与响应式数据相关的,就此做一份笔记作为区别,本文重点给大家讲解vue3中的ref,toRef,toRefs三个是干嘛的,有什么作用,感兴趣的朋友跟随小编一起看看吧

1. ref的使用

     ref 接受一个原始值,返回一个具有响应式的对象,对象有一个value属性,其值就是所传递的原始值。

  ref是做的一个拷贝关系,修改对象msg的值,不会影响对象obj,视图会发生变化。

    import { ref } from "vue";
    let obj = { name: "你好", age: 16 };
    let msg = ref(obj.name);
    console.log(msg.value); // 你好
    let arr = ref([]) // ref 可以是任何类型 也可以是对象
    function change1() {
      msg.value = "世界"; 
      //修改msg1数据的时候必须要加 .value 渲染数据的时候就不用加了
      console.log(obj, msg.value);
      // {name: "你好", age: 16} '世界' 
      // 数据此时没改变 但是页面的数据改变了
      
    }
    change1();
 
     return {
        obj,
        msg,
     };

 如果给dom上加ref 就是当前的dom元素

<template>
  <div class="home-new">  
      <div ref="target">
       
      </div>
  </div>
</template>
import {ref} from 'vue'
export default {
  name: "HomeNew",
  setup(p, { emit }) {
    const target = ref(null);
    // 懒加载
    console.log(target);
    return {
      target,
    };
  },
 
};

2. toRef的使用

  toRef用来给抽离响应式对象中的某一个属性,并把该属性包裹成ref对象,使其和原对象产生链接

 toRef是做的一种引用关系,修改msg2的值,会影响对象msg,但视图不会发生变化

    setup(){
    	let msg = { name: 'zs', age: 16 }
        let msg2 = toRef(msg, 'name')
        console.log(msg2.value)	// zs
        function change2() {
            msg2.value = 'ww'
            console.log(msg, msg2.value) // {name: "ww", age: 16} ww
            //此时 msg.ww 数据变了 但是视图上的是不会变的
        }
        change2()
        return { msg2,change2 }
    }

3. toRefs的使用

 toRefs用来把响应式对象转换成普通对象,把对象中的每一个属性,包裹成ref对象

toRefs就是toRef的升级版,只是toRefs是把响应式对象进行转换,其余的特性和toRef无二

setup(){
    let msg = { name: 'zs', age: 16 }
    let msg3 = toRefs(msg)
    console.log(msg) // { name:ref, age:ref }  ref代指ref对象
    function change3() {
      msg3.name.value = 'zl'
      msg3.age.value = 20
      console.log(msg, msg3) // {name: "zl", age: 20} { name:ref, age:ref }
    }
    change3()
    return { msg3, change3 }
}

 请求过来的数据封装了一下

<script>
import { reactive, toRefs } from "vue";
import { getBanner } from "@/api";
export default {
  setup() {
    return {
      ...toRefs(getBan()),
    };
  },
};
function getBan() {
  let bannerList = reactive({
    list: [],// 模板中直接 写入 list 就可以了
  });
  getBanner().then((res) => {
    bannerList.list = res.data;
    console.log(bannerList.list);
  });
  return bannerList;
}
</script>

这样写模板中直接写入 {{ list }}  就可以了 , 不用 {{ obj.list }},修改数据的时候还是 obj.list = 'aaa' 

  import { reactive, toRefs } from "vue";
  setup() {
    let obj = reactive({
      list: [],
      newS: [],
      moods: [],
    });
 
    return { ...toRefs(obj) };
  },

4.总结

ref、toRef、toRefs 都可以将某个对象中的属性变成响应式数据

ref的本质是拷贝,修改响应式数据,不会影响到原始数据,视图会更新

toRef、toRefs的本质是引用,修改响应式数据,会影响到原始数据,视图会更新

toRef 一次仅能设置一个数据,接收两个参数,第一个参数是哪个对象,第二个参数是对象的哪个属性

toRefs接收一个对象作为参数,它会遍历对象身上的所有属性,然后挨个调用toRef执行

到此这篇关于vue3中的ref,toRef,toRefs三个是干嘛的,有什么作用呢。的文章就介绍到这了,更多相关vue3 ref,toRef,toRefs内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue实现购物车详情页面的方法

    Vue实现购物车详情页面的方法

    这篇文章主要介绍了Vue实战之购物车详情页面的实现,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 老生常谈vue3组件通信方式

    老生常谈vue3组件通信方式

    这篇文章主要介绍了vue3组件通信方式,面试题经常会问到vue3组件间的通信方式,今天就通过实例代码给大家详细介绍下,对vue3组件通信相关知识感兴趣的朋友一起看看吧
    2022-08-08
  • Vue NextTick介绍与使用原理

    Vue NextTick介绍与使用原理

    我们对Vue中data数据的修改会导致界面对应的响应变化,而通过nextTick方法,可以在传入nextTick的回调函数中获取到变化后的DOM,讲起来可能还是有点梦幻,下面我们直接使用nextTick体验一下效果
    2022-08-08
  • vue openlayers实现台风轨迹示例详解

    vue openlayers实现台风轨迹示例详解

    这篇文章主要为大家介绍了vue openlayers实现台风轨迹示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • vue结合el-upload实现腾讯云视频上传功能

    vue结合el-upload实现腾讯云视频上传功能

    这篇文章主要介绍了vue结合el-upload实现腾讯云视频上传功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Vue高级特性概念原理详细分析

    Vue高级特性概念原理详细分析

    这篇文章主要介绍了Vue高级特性概念原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • vue自定义指令实现元素滑动移动端适配及边界处理

    vue自定义指令实现元素滑动移动端适配及边界处理

    这篇文章主要为大家介绍了vue自定义指令实现元素滑动移动端适配及边界处理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • vue点击当前路由高亮小案例

    vue点击当前路由高亮小案例

    这篇文章主要为大家详细介绍了vue点击当前路由高亮小案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • vue上传图片到oss的方法示例(图片带有删除功能)

    vue上传图片到oss的方法示例(图片带有删除功能)

    这篇文章主要介绍了vue上传图片到oss的方法示例(图片带有删除功能),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vue实现简单表格组件实例详解

    vue实现简单表格组件实例详解

    vue的核心思想就是组件,什么是组件呢?按照我的理解组件就是装配页面的零件,vue三大核心组件 路由 状态管理,路由控制页面的渲染,页面由组件组成,数据有vuex进行管理和改变。下面我会以一个简单的案例来说
    2017-04-04

最新评论