「Vue3学习篇」-isRef()、unref()

248 阅读1分钟

『引言』

本篇介绍isRef()、unref()这2个API。关于这2个API是用来干什么的,以及使用方法等等都会有说明。

『isRef()』

『isRef()定义』

检查某个值是否为 ref。是返回true,否则返回false。

『isRef()用法』

<template>
  <div>
    <h1>人物简介</h1>
    <p>姓名:{{name}}</p>
    <p>年龄:{{age}}岁</p>
    <p>爱好:{{hobbies.join('、')}}</p>
    <p>地址:{{address.provice}} - {{ toRefCity }} </p>
    <p>描述:{{description}}</p>
  </div> 
</template>

<script setup>
import { ref, reactive, toRef, toRefs, isRef } from 'vue'
    const name = ref('pupu')
    const age = 10
    const hobbies = ref(['唱歌', '画画'])
    const address = reactive({
      provice: '浙江省',
      city: '杭州市'
    })
    const description = ref('一点也不可爱,不喜欢吃蜂蜜!')
    const toRefCity = toRef(address, 'city')
    const toRefsAddress = toRefs(address)

    // 判断是否为ref对象
    console.log(isRef(name), 'isRefname')
    console.log(isRef(age), 'isRefage')
    console.log(isRef(hobbies),'isRefhobbies')
    console.log(isRef(address),'isRefaddress')
    console.log(isRef(description),'isRefdescription')
    console.log(isRef(toRefCity),'isReftoRefCity')
    console.log(isRef(toRefsAddress),'isReftoRefsAddress')
</script>

『效果展示』

08.png

『isRef源码』

isRef源码如下⬇️:

export function isRef<T>(r: Ref<T> | unknown): r is Ref<T>
export function isRef(r: any): r is Ref {
  return !!(r && r.__v_isRef === true)
}

需要判断判断__v_isRef是否为true。

『unref()』

『unref()定义』

如果参数是 ref,则返回内部值,否则返回参数本身。这是 val = isRef(val) ? val.value : val 计算的一个语法糖。

『unref()用法』

<template>
  <div>
    <h1>人物简介</h1>
    <p>姓名:{{name}}</p>
    <p>年龄:{{age}}岁</p>
    <p>爱好:{{hobbies.join('、')}}</p>
    <p>地址:{{address.provice}} - {{ toRefCity }} </p>
    <p>描述:{{description}}</p>
  </div> 
</template>

<script setup>
import { ref, reactive, toRef, toRefs, unref } from 'vue'
    const name = ref('wnxx')
    const age = 3
    const hobbies = ref(['打羽毛球', '旅游'])
    const address = reactive({
      provice: '云南省',
      city: '丽江市'
    })
    const description = ref('非常的可爱,特别喜欢吃蜂蜜!')
    const toRefCity = toRef(address, 'city')
    const toRefsAddress = toRefs(address)

    // 打印
    console.log(unref(name))
    console.log(unref(age))
    console.log(unref(hobbies))
    console.log(unref(address))
    console.log(unref(description))
    console.log(unref(toRefCity))
    console.log(unref(toRefsAddress))
</script>

『unref()注意』

  • unref(val) 相当于val=isRef(val)?val.value:val

『效果展示』

09.png

『unref源码』

unref源码如下⬇️:

export function unref<T>(ref: MaybeRef<T>): T {
  return isRef(ref) ? ref.value : ref
}