Vue3中Composition 其他一些API

news2024/11/26 10:43:56

一、 Reactive判断的API 

1. isProxy 

检查对象是否由reactive或者readonly创建的proxy ,返回一个布尔值

<script setup>
import { reactive, readonly, isProxy } from 'vue'

let foo = readonly({ name: 'WFT1' }) // 其中的属性不可修改

let bar = reactive({ name: 'WFT2' })

console.log(isProxy(foo)) // true
console.log(isProxy(bar)) // true

</script>

2. isReactive 

检查对象是否是由reactive创建的响应式代理 

如果该代理是readonly创建的,但包裹了由reactive船舰的另一个代理,它也会返回为true 

<script setup>
import { reactive, readonly, isReactive } from 'vue'

let foo = reactive({ name: 'WFT2' })

let bar = readonly(reactive({ name: 'WFT1' }))

let info = readonly({ age: 18 })


console.log(isReactive(foo)) // true
console.log(isReactive(bar)) // true
console.log(isReactive(info)) // false

</script>

3.  isReadonly

检查对象是否是由readonly创建的只读代理 

<script setup>
import { readonly, isReadonly } from 'vue'

let foo = readonly({ name: 'WFT1' })

console.log(isReadonly(foo)) // true

</script>

4. toRaw 

返回 reactive 或 readonly代理的原始对象(不建议保留对原始对象的持久引用,请谨慎使用) 

<script setup>
import { reactive, readonly, toRaw } from 'vue'

let obj1 = { name: 'WFT1' }
let obj2 = { name: 'WFT2' }

let foo = reactive(obj1)
let bar = readonly(obj2)

let myObj1 = toRaw(foo)
let myObj2 = toRaw(bar)

console.log(myObj1 === obj1) // true
console.log(myObj2 === obj2) // true

</script>

5. shallowReactive 

创建一个响应式代理,它跟踪其自身property的响应性,但不执行嵌套对象的深层响应式转换(深层还是原生对象) 

<template>
  <div class="main">
    <h3>{{ obj.info.name }}</h3>
    <button @click="edit">深层修改</button>
  </div>
</template>
<script setup>
import { shallowReactive } from 'vue'

let obj = shallowReactive({
  info: {
    name: 'WFT'
  }
})

const edit = () => {
  obj.info.name = '哈哈哈'
  console.log(obj)
}
</script>

上面代码,当点击深层修改按钮时 页面并没有改变,但是控制台打印的obj其中的info.name已经修改。如果换成reactive包裹就会发生改变 

6. shallowReadonly 

创建一个proxy,使其自身的property为只读,但不执行嵌套对象的深度只读转换(深层还是可读、可写的) 

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

let obj = readonly({
  info: {
    name: 'WFT'
  }
})

const edit = () => {
  obj.info.name = '哈哈哈'
}
</script>

 看这段儿代码,我们去修改其中属性在控制台会给出警告,为一个只读属性,不可修改

但是将readonly换成 shallowReadonly 就可以修改了,当然浅层是不能修改的,深层还是可以修改

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

let obj = shallowReadonly({
  info: {
    name: 'WFT'
  }
})

const edit = () => {
  obj.info.name = '哈哈哈'
}
</script>

二、Ref相关的API 

1.isRef 

 检查对象是否是由ref创建的响应式代理 

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

const name = ref('WFT')

console.log(isRef(name)) // true

</script>

2. toRefs 

这个就是,当我们使用了reactive定义了响应式对象的时候,我们想通过es6语法解构出来使用的华,这时候的解构出来的就不是响应式数据。如果想解构出来的也是响应式数据,就要使用toRefs了,使用toRefs包裹之后,再解构出来,里面的每个属性都相当于通过ref包裹了一层的

<template>
  <div class="main">
    <h3>{{ info.age }}</h3>
    <h3>{{ age }}</h3>
    <button @click="edit">修改age</button>
  </div>
</template>
<script setup>
import { reactive, toRefs } from 'vue'

let info = reactive({ age: 18 })

let { age } = toRefs(info)

const edit = () => {
  age.value++
}
</script>

就像上面的代码示例 

3. toRef 

这个和toRefs有着一样的功能,只不过这个是将里面的某一个属性转为响应式,该方法接受两个参数,第一个参数就是目标reactive对象,第二个就是我们要操作的属性 

<template>
  <div class="main">
    <h3>{{ info.age }}</h3>
    <h3>{{ age }}</h3>
    <button @click="edit">修改age</button>
  </div>
</template>
<script setup>
import { reactive, toRef } from 'vue'

let info = reactive({ name: 'wft', age: 18 })

let age = toRef(info, 'age')

const edit = () => {
  age.value++
}
</script>
<script setup>
import { reactive, toRef } from 'vue'

const state = reactive({ name: 'wft', age: 18 })

// 如果我们只希望转换一个reactive对象中的属性为ref响应式变量,那么可以使用toRef方法
const name = toRef(state, 'name')
const { age } = state // 这个age不是响应式数据
const changeName = () => state.name = 'WFT'
</script>

4. unref 

 如果我们想要获取一个ref引用中的value,那么也可以通过unref

  •  如果参数是一个ref,则返回内部值,否则返回参数本身;
  • 这是 val = isRef(val) ? val.value : val 的语法糖函数
<script setup>
import { ref, unref } from 'vue'

const name = ref('WFT')

test(name)
test('这个名字不是由ref方法包裹的')

function test(name) {
  console.log(unref(name))
}

</script>

5. shallowRef 

创建一个浅层的ref对象 和 shallowReactive类似

<template>
  <div class="main">
    <h3>{{ obj.info.age }}</h3>
    <button @click="editAge">修改age</button>
  </div>
</template>
<script setup>
import { shallowRef } from 'vue'

const obj = shallowRef({ info: { name: 'wft', age: 18 } })

const editAge = () => {
  obj.value.info.age++
  console.log(obj.value.info.age) // 19  但是页面没有更新
}

</script>

6. triggerRef 

手动触发和shallowRef相关联的副作用 

还是上面的代码,我们使用shallowRef包裹的浅层ref对象,修改深层变量的时候页面不会进行更新,这时候我们手动调用triggerRef就可以强制更新 

<template>
  <div class="main">
    <h3>{{ obj.info.age }}</h3>
    <button @click="editAge">修改age</button>
  </div>
</template>
<script setup>
import { shallowRef, triggerRef } from 'vue'

const obj = shallowRef({ info: { name: 'wft', age: 18 } })

const editAge = () => {
  obj.value.info.age++
  triggerRef(obj)
}

</script>

7. customRef (使用极少)

创建一个自定义的ref,并对其依赖项跟踪和更新触发进行显示控制

  • 它需要一个工厂函数 ,该函数接受 track 和 trigger函数作为参数;
  • 并且应该返回一个带有get 和 set的对象 

其实上面真正使用到的时候就不多,这个的使用就更少了,所以我也没有很深入去研究这个api,所以这个不做案例代码了,知道有这个东西就好了,大家感兴趣可以自己去百度找一些案例看看,一般做第三方库的时候可能会使用这个api 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/651454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepSpeed结合Megatron-LM训练GPT2模型笔记(上)

文章目录 0x0. 前言0x1. Megatron使用单卡训练GPT2依赖安装准备训练数据训练详细流程和踩坑 0x2. Megatron使用单卡预测训练好的GPT2模型0x3. 参数量和显存估计参数量估计训练显存占用估计 0x4. Megatron使用多卡训练GPT2模型2卡数据并行2卡模型并行 0x5. 总结 0x0. 前言 本文…

【V4L2】 v4l2框架分析之v4l2_subdev

文章目录 一、v4l2_subdev简介二、初始化v4l2_subdev三、注册/注销subdev四、异步注册子设备 一、v4l2_subdev简介 相关源码文件&#xff1a; /include/media/v4l2-subdev.h/drivers/media/v4l2-core/v4l2-subdev.c 在linux内核中&#xff0c;许多驱动程序需要与子设备通信&…

【嵌入式linux】spi驱动加载后probe函数未执行的问题

【嵌入式linux】spi驱动加载后probe函数未执行的问题 问题描述解决办法 问题描述 嵌入式linux平台下的spi分为设备、总线和驱动&#xff0c;一般半导体原厂已经实现好了spi设备和总线的相关代码&#xff0c;开发者只需根据实际使用情况修改设备树以及编写驱动部分的代码即可。…

Android进阶 四大组件的工作过程(四):ContentProvider的工作过程

Android进阶 四大组件的工作工程&#xff08;四&#xff09;&#xff1a;ContentProvider的工作过程 导语 本篇是介绍四大组件的最后一篇文章&#xff0c;前三篇文章里我们已经介绍了Activity&#xff0c;Service以及Broadcast的工作流程&#xff0c;那么这篇文章我们就来介绍…

【数据结构与算法分析】一文搞定插入排序、交换排序、简单选择排序、合并排序的代码实现并给出详细讲解

文章目录 排序相关的基本概念排序算法及其实现插入排序直接插入排序折半插入排序希尔排序 交换排序冒泡排序快速排序 合并排序归并排序简单选择排序 算法比较 排序相关的基本概念 排序&#xff1a;将数组中所有元素按照某一顺序(从小到大或从大到小)重新排列的过程。排序算法的…

DJ2-5 内容分发网络 CDN

目录 单一的大规模数据中心 内容分发网络 CDN 单一的大规模数据中心 存在三个问题&#xff1a; ① 如果客户远离数据中心&#xff0c;服务器到客户的分组将跨越许多通信链路并很可能通过许多 ISP&#xff0c;给用户带来恼人的时延。 ② 流行的视频很可能经过相同的通信链路…

[C++11] 智能指针

长路漫漫&#xff0c;唯剑作伴。 目录 长路漫漫&#xff0c;唯剑作伴。 为什么需要智能指针 RAII 使用RAII思想管理内存 重载 * 和-> 总结一下智能指针的原理&#xff1a; C的智能指针和拷贝问题 auto_ptr (C98) ​编辑 auto_ptr的实现原理…

EmGUCV中类函数 FastFeatureDetector使用详解

FastFeatureDetector Class 释义&#xff1a;FAST&#xff08;加速检测特&#xff09;关键点检测器&#xff0c;源自 E. Rosten ("Machine learning for high-speed corner detection, 2006). 继承关系&#xff1a;Emgu.CV.Features2D.FastFeatureDetector 派生&#xff…

记录好项目D5

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是 商品信息管理系统 技术栈&#xff1a;SpringBoot Mybatis Thymelea…

MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性

\ &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭…

细谈容器化技术实现原理--以Docker为例

目录 一、Docker解决了什么 二、容器的发展过程 三、容器基础 3.1. 容器实现的原理&#xff1a; ⚠️原理详解&#xff1a; 3.1.1. Namespace 3.1.2. Cgroups 3.1.3. chroot 四、Volume 4.1. Docker是如何做到把一个宿主机上的目录或者文件&#xff0c;挂载到容器里面…

4. 数组更新检测

4.1 v-for更新监测 当v-for遍历的目标结构改变, Vue触发v-for的更新 情况1: 数组翻转 情况2: 数组截取 情况3: 更新值 口诀: 数组变更方法, 就会导致v-for更新, 页面更新 数组非变更方法, 返回新数组, 就不会导致v-for更新, 可采用覆盖数组或this.$set() 这些方法会触发数组改…

基于深度学习的高精度鸽子检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度鸽子检测识别系统可用于日常生活中或野外来检测与定位鸽子目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的鸽子目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

XSS注入——反射性XSS

xss注入的攻击步骤&#xff1a; 1.查找可能存在的注入点&#xff08;搜索框&#xff0c;留言板&#xff0c;注册&#xff09; 2.观察输出显示位置&#xff1a; html&#xff1a; 尖括号外部&#xff0c; 尖括号内部: 引号内部》闭合&#xff0…

Django | 基于pycharm的django配置52张全流程截图,红星给你一步一步的男妈妈式教学

演示版本&#xff1a;【windows系统】python3.10pycharm2023.1.2django4.2.2 &#xff08;本教程全程在虚拟机中演示&#xff0c;读者无需配置虚拟机&#xff0c;直接按教程安装即可&#xff09; 目录 1.搞到必要的安装包 2.事先准备 3.安装chrome浏览器&#xff08;也可以…

国产MCU-CW32F030开发学习--按键检测

国产MCU-CW32F030开发学习–按键检测 bsp_key 按键驱动程序用于扫描独立按键&#xff0c;具有软件滤波机制&#xff0c;采用 FIFO 机制保存键值。可以检测 如下事件&#xff1a; 按键按下。 按键弹起。 长按键。 长按时自动连发。 我们将按键驱动分为两个部分来介绍&#xff…

C语言学习笔记:顺序结构

✨博文作者&#xff1a;烟雨孤舟 &#x1f496; 喜欢的可以 点赞 收藏 关注哦~~ ✍️ 作者简介: 一个热爱大数据的学习者 ✍️ 笔记简介&#xff1a;作为大数据爱好者&#xff0c;以下是个人总结的学习笔记&#xff0c;如有错误&#xff0c;请多多指教&#xff01; 目录 程序与…

《面试1v1》Spring基础

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

浅谈微前端

本文呢是我梳理的一个扫盲文&#xff0c;由于最近团队准备使用微前端对项目进行改造&#xff0c;所以我呢就先浅了解一下&#xff1a; 微前端到底是什么&#xff1f; 为什么要使用微前端&#xff1f; 都有哪些微前端方案&#xff1f; 微前端有什么不好的地方吗&#xff1f; 通过…

48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll

文章目录 48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll48.1 概述48.2 操作指导 48 最佳实践-性能最佳实践-Guest-Idle-Haltpoll 48.1 概述 为了保证公平性及降低功耗&#xff0c;当虚拟机vCPU空闲时&#xff0c;虚拟机将执行WFx/HLT指令退出到宿主机中&#xff0c;并触发上…