Vue Unref:解析Vue 3 Composition API中的Unref函数

在Vue 3 Composition API中,推出了新的工具函数Unref,它允许我们从ref、reactive或readonly代理中获取原始值。

一、什么是Unref

在Vue 3 Composition API中使用ref、reactive或readonly创建的响应式数据是代理对象,使用Unref函数可以获取这些代理对象中的原始值。

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('Hello World')
const rawMessage = unref(message)
</script>

在以上代码中,使用Unref函数从ref对象中获取原始值,并将其赋值给了rawMessage变量。

二、Unref的使用场景

1.使用ref、reactive或readonly创建的响应式数据

在使用ref、reactive或readonly创建响应式数据时,它们会返回一个代理对象,而不是原始值。如果需要访问原始值,可以使用Unref函数获取。

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('Hello World')
const rawMessage = unref(message)

console.log(typeof message) // "object"
console.log(typeof rawMessage) // "string"
</script>

在上述代码中,message是一个代理对象,而rawMessage是message对象的原始值。

2.在自定义函数中使用

在自定义函数中可以使用Unref函数将代理对象转换为原始值,然后进行对原始值的操作。

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('Hello World')

function showMessage(message) {
  console.log(`Message: ${unref(message)}`)
}

showMessage(message)
</script>

在以上代码中,Unref函数将代理对象message转换为原始值,然后将其传递给showMessage函数进行处理。

3.多重嵌套数据结构中使用

在多重嵌套数据结构中使用时,Unref函数可以便捷地获取想要的原始值。

<template>
  <p>{{userInfo.name}}</p>
  <p>{{userInfo.age}}</p>
  <p>{{userInfo.position}}</p>
</template>

<script setup>
import { reactive } from 'vue'

const userInfo = reactive({
  name: 'John Doe',
  age: 30,
  job: {
    position: 'Web Developer'
  }
})

const position = unref(userInfo.job.position)

console.log(position) // "Web Developer"
</script>

在以上代码中,使用Unref函数获取userInfo对象中嵌套的job对象的position属性。

三、Unref与ToRef的区别

Unref函数和ToRef函数都是Vue 3 Composition API中响应式数据工具函数,但它们的作用不同。

ToRef函数可以将原始数据转换为ref对象,而Unref函数是将ref、reactive或readonly创建的代理对象转换为原始值。

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { ref, toRef } from 'vue'

const rawMessage = "Hello World"
const message = toRef(rawMessage)

console.log(typeof message) // "object"
console.log(message.value) // "Hello World"
console.log(unref(message)) // "Hello World"
</script>

在以上代码中,使用ToRef函数将原始字符串转换为ref对象,并且可以通过.value属性来访问原始值。

四、Unref函数的注意事项

在使用Unref函数时需要注意以下几点:

1.当传递的值是一个原始值时,Unref函数会返回该值

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { unref } from 'vue'

const message = 'Hello World'
const rawMessage = unref(message)

console.log(message) // "Hello World"
console.log(rawMessage) // "Hello World"
</script>

在以上代码中,Unref函数返回的是原始值message本身。

2.当传递的值是一个Promise时,Unref函数会等待Promise的值完成

在使用Unref函数获取一个Promise时,Unref函数会等待Promise的值完成,并返回Promise的结果。

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { unref } from 'vue'

const message = Promise.resolve('Hello World')
const rawMessage = unref(message)

console.log(rawMessage) // "Hello World"
</script>

3.当传递的值是一个ref时,使用Unref函数可以忽略.value属性

使用Unref函数获取ref对象时,可以忽略.value属性,而直接返回ref对象的原始值。

<template>
  <p>{{message}}</p>
</template>

<script setup>
import { ref, unref } from 'vue'

const message = ref('Hello World')
const rawMessage = unref(message)

console.log(typeof message) // "object"
console.log(typeof rawMessage) // "string"
</script>

五、结论

Unref函数是Vue 3 Composition API中非常实用的工具函数,可以很方便地获取ref、reactive或readonly创建的代理对象中的原始值,在函数中的使用也是非常灵活实用的。

原创文章,作者:AEQDR,如若转载,请注明出处:https://www.506064.com/n/360995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
AEQDRAEQDR
上一篇 2025-02-24 00:33
下一篇 2025-02-24 00:33

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • 掌握magic-api item.import,为你的项目注入灵魂

    你是否曾经想要导入一个模块,但却不知道如何实现?又或者,你是否在使用magic-api时遇到了无法导入的问题?那么,你来到了正确的地方。在本文中,我们将详细阐述magic-api的…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29

发表回复

登录后才能评论