• Vue3 ref、reactive、toRef、toRefs的区别


    vue3.0里给数据添加响应式有很多api可用,有时傻傻分不清,哎,分享一下个人的理解。

    一、reactive
    reactive 用于为对象添加响应式状态。接收一个js对象作为参数,返回一个具有响应式状态的副本。

    获取数据值的时候直接获取,不需要加.value
    参数只能传入对象类型
    import { reactive } from 'vue'

    // 响应式状态
    const state = reactive({
    count: 0
    })

    // 打印count的值
    console.log(state.count)

    二、ref
    ref 用于为数据添加响应式状态。由于reactive只能传入对象类型的参数,而对于基本数据类型要添加响应式状态就只能用ref了,同样返回一个具有响应式状态的副本。

    获取数据值的时候需要加.value。可以理解为ref是通过reactive包装了一层具有value属性的对象实现的
    参数可以传递任意数据类型,传递对象类型时也能保持深度响应式,所以适用性更广。
    vue 3.0 setup里定义数据时推荐优先使用ref,方便逻辑拆分和业务解耦。
    import { ref } from 'vue'

    // 为基本数据类型添加响应式状态
    const name = ref('Neo')

    // 为复杂数据类型添加响应式状态
    const state = ref({
    count: 0
    })

    // 打印name的值
    console.log(name.value)
    // 打印count的值
    console.log(state.value.count)

    尽量不要混着用,reactive和ref选一种,toRef和toRefs选一种,不然代码会很乱。

    三、toRef
    toRef 用于为源响应式对象上的属性新建一个ref,从而保持对其源对象属性的响应式连接。接收两个参数:源响应式对象和属性名,返回一个ref数据。例如使用父组件传递的props数据时,要引用props的某个属性且要保持响应式连接时就很有用。

    获取数据值的时候需要加.value
    toRef后的ref数据不是原始数据的拷贝,而是引用,改变结果数据的值也会同时改变原始数据

    import { defineComponent, toRef } from 'vue'
    
    export default defineComponent({
      props: [title],
      
      setup (props) {
        // 创建变量myTitle
        const myTitle = toRef(props, 'title')
    
        console.log(myTitle.value)
      }
    })
    

    四、toRefs
    toRefs 用于将响应式对象转换为结果对象,其中结果对象的每个属性都是指向原始对象相应属性的ref。常用于es6的解构赋值操作,因为在对一个响应式对象直接解构时解构后的数据将不再有响应式,而使用toRefs可以方便解决这一问题。

    获取数据值的时候需要加.value
    toRefs后的ref数据不是原始数据的拷贝,而是引用,改变结果数据的值也会同时改变原始数据
    作用其实和 toRef 类似,只不过 toRef 是一个个手动赋值,而 toRefs 是自动赋值。

    import { defineComponent, toRefs } from 'vue'
    
    export default defineComponent({
      props: [title],
      
      setup (props) {
        // 使用了解构赋值语法创建了变量myTitle
        const { myTitle } = toRefs(props)
    
        console.log(myTitle.value)
      }
    })
    

    尽量不要混着用,reactive和ref选一种,toRef和toRefs选一种,不然代码会很乱。

    ————————————————
    版权声明:本文为CSDN博主「醉逍遥neo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010059669/article/details/112287552

  • 相关阅读:
    Python---列表相关操作
    PyCharm使用小技巧--git上传代码至远程仓库
    Linux下修改文件权限
    Linux运行jmeter
    Jmeter添加负载机
    git使用
    Linux之12——常用统计命令之uniq
    Linux之11——常用统计命令之sort
    Linux之10——dd命令详解
    Linux之8——性能调优之iostat命令详解
  • 原文地址:https://www.cnblogs.com/lyzz1314/p/15021376.html
Copyright © 2020-2023  润新知