vue3.0---使用ref,reactive, toRefs

什么是ref?
ref和reactive一样,也是用来实现响应式数据的方法,由于reactive必须传递一个对象,所以导致在企业的开发中如果我们只想让某个变量实现响应式的时候会非常麻烦,所以vue3.0给我们提供了ref方法,实现对简单值的监听。
ref的本质 :
ref底层的本质还是reactive
系统会自动根据我们给ref传入的值将它转换成
ref(xx) => reactive(value:xx)
ref注意点:
在vue3.0中使用ref的值不用通过value猎取。
在JS中使用ref的值必须通过value获取

ref和reactive区别:
如果在template里使用的是ref类型数据,那么vue会自动帮我们添加.value
如果在template里使用reactive类型数据,那么vue不会自动 帮我们添加。value
vue是如何决定是否需要自动添加.value的。
vue在解析数据之前,会自动判断这个数据是否是ref类型的。
如果是就自己动添加.value,如果不是就不自动添加。
vue是如何判断当前的数据是否是ref类型的
通过当前数据的__v_ref来判断。
如果有这个私有属性,并且取值为true,那么就代表是一个Ref类型的数据。
vue通过源代码判断,使用者如何 判断?
import {isRef, isReactive}from vue
console.log(isRef(**))
console.log(isReactive(*))

ref 单个定义

<template>
<div>{{num}}</div>
<div>{{name}}</div>
<div>{{arr[0]}}</div>
<div>{{obj}}</div>
</template>
<script>
import { defineComponent, ref } from "vue";
export default defineComponent({
  name: "home",
  setup(props, ctx) {
    let num = ref(10)
    let name = ref('zhihui')
    let arr = ref(['a','b','d'])
    let obj = ref({name:'zzz'})
    return {
      num,
      name,
      arr,
      obj
    }
  },
});
</script>
<style scoped lang="scss">
</style>

reactive 定义对象

<template>
<div>{{data.age}}</div>
<div>{{data.name}}</div>
<div>{{data.arr[0]}}</div>
<div>{{data.obj}}</div>
</template>
<script>

import { defineComponent, ref , reactive} from "vue";
export default defineComponent({
  name: "home",

  setup(props, ctx) {
    let data = reactive({
      name:'zhihii',
      age:'20',
      obj:{
        price:'20'
      },
      arr:['a,','b','d']
    })
    return {
      data
    }
  },
});
</script>
<style scoped lang="scss">
</style>

toRefs将对象拆开解构成单个字段返回
作用:创建一个ref对象,其value值指向另一个对象中的某个属性。
语法 :const name = toRef(person, ‘name’)
应用: 要将响应式对象中的某个属性单独提供给外部使用时。
扩展: toRefs 与toRef功能一致,但可以指创建多个ref对象,语法toRef(person)

<template>
<div>{{age}}</div>
<div>{{name}}</div>
<div>{{arr[0]}}</div>
<div>{{obj}}</div>
</template>
<script>
import { defineComponent, ref , reactive, toRefs} from "vue";
export default defineComponent({
  name: "home",
  setup(props, ctx) {
    let data = reactive({
      name:'zhihiiwang',
      age:'20',
      obj:{
        price:'20'
      },
      arr:['a,','b','d']
    })
    return {
      // data
      ...toRefs(data)
    }
  },
});
</script>
<style scoped lang="scss">
</style>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值