Vue —— 实用的工具函数

news2025/4/19 2:15:00

目录

  • 响应式数据管理
    • 1. toRef 和 torefs
    • 2. shallowRef 和 shallowReactive
    • 3. markRaw
  • 依赖追踪与副作用
    • 1. computed
    • 2. watch 和 watchEffect
  • 类型判断与优化
    • 1. unref
    • 2. isRef 、isReactive 和 isProxy
  • 组件通信与生命周期
    • 1. provide 和 inject
    • 2. nextTick
  • 高级工具
    • 1. useAttrs 和 useSlots

响应式数据管理

1. toRef 和 torefs

作用: 将响应式对象的属性转换为 ref,保持解构后的响应性
场景: 解构 reactive 对象时避免丢失响应性
示例:

import { reactive, toRef, toRefs } from 'vue';

const state = reactive({ x: 1, y: 2 });

// 解构单个属性
const xRef = toRef(state, 'x');  // xRef.value 始终同步 state.x

// 解构所有属性
const { y } = toRefs(state); // y.value 同步 state.y

2. shallowRef 和 shallowReactive

作用: 创建浅层响应式数据(只跟踪顶层的属性变化)。
场景: 优化性能,避免深度监听大对象
示例:

const shallowState = shallowReactive({
	nested: { data : 'value' }  // 修改 nested.data 不会触发响应式更新
})

const shallowCount = shallowRef({ value : 0 });
shallowCount.value.value = 1; // 不会触发响应式更新

3. markRaw

作用: 标记对象为 “ 非响应式 ”,避免被 Vue 转换为代理。
场景: 处理第三方库对象或性能敏感数据。
示例:

const rawObject = markRaw({ data : 'static' });
const state = reactive({ rawObject }); // rawObject 不会被代理

依赖追踪与副作用

1. computed

作用: 创建依赖其他响应式数据的计算属性。
场景: 缓存复杂计算结果,避免重复计算
示例:

const count = ref(0);
const doubled = computed(()=> count.value * 2);

console.log(doubled.value);  // count 变化后自动更新

2. watch 和 watchEffect

作用: 监听数据变化并执行副作用

  • watch: 显式指定监听目标
  • watchEffect: 自动追踪依赖

示例:

const count = ref(0);

// 监听 count 变化
watch(count, (newVal, oldVal)=>{
	console.log(`Count changed from ${oldVal} to ${newVal}`)
});

// 自动追踪依赖
watchEffect(() => {
	console.log(`Count is ${count.value}`);
})

类型判断与优化

1. unref

作用: 快速获取 ref 的值(如果是 ref 返回 .value,否则返回原值)。
场景: 简化 ref 和普通值的混合处理
示例:

const x = ref(10);
const rawValue = 20;

console.log(unref(x));    // 10 不用x.value
console.log(unref(rawValue)); // 20

2. isRef 、isReactive 和 isProxy

作用: 判断变量类型

  • isRef(value): 是否为 ref 对象
  • isReactive(value): 是否为 reactive 创建的响应式对象
  • isProxy(value): 是否为 reactive 或 readonly 代理

示例:

const count = ref(0);
const state = reactive({ x: 1 });

console.log(isRef(count));      // true
console.log(isReactive(state)); // true
console.log(isProxy(state));    // true

组件通信与生命周期

1. provide 和 inject

作用: 跨层级组件传递数据
场景: 避免逐层传递 props
示例:

// 父组件
import { provide } from 'vue';
provide('theme', 'dark');

// 子组件
import { inject } from 'vue';
const theme = inject('theme', 'light'); // 默认值 'light'

2. nextTick

作用: 在 DOM 更新后执行回调
场景: 操作更新后的 DOM 元素
示例:

import { nextTick } from 'vue';

const updateData = async () => {
	data.value = 'new value';
	await nextTick();
	console.log('DOM 已更新');
}

高级工具

1. useAttrs 和 useSlots

作用: 在 script setup 中访问组件的 attrs 和 slots
场景: 处理未声明为 props 的属性或动态插槽
示例:

<script setup>
import { useAttrs, useSlots } from 'vue';

const arrts = useAttrs();  // 获取所有非 props 属性
const slots = useSlots();  // 获取插槽内容
<script> 

总结:合理使用这些工具,可以大幅度提升代码的简洁性和可维护性,同时避免常见的响应式陷阱

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

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

相关文章

flex布局(笔记)

弹性布局&#xff08;Flex布局&#xff09;是一种现代的CSS布局方式&#xff0c;通过使用display: flex属性来创建一个弹性容器&#xff0c;并在其中使用灵活的盒子模型来进行元素的排列和定位。 主轴与交叉轴&#xff1a;弹性容器具有主轴&#xff08;main axis&#xff09;和…

云函数采集架构:Serverless模式下的动态IP与冷启动优化

在 Serverless 架构中使用云函数进行网页数据采集&#xff0c;不仅能大幅降低运维成本&#xff0c;还能根据任务负载动态扩展。然而&#xff0c;由于云函数的无状态特性及冷启动问题&#xff0c;加上目标网站对采集行为的反制措施&#xff08;如 IP 限制、Cookie 校验等&#x…

Linux笔记---动静态库(原理篇)

1. ELF文件格式 动静态库文件的构成是什么样的呢&#xff1f;或者说二者的内容是什么&#xff1f; 实际上&#xff0c;可执行文件&#xff0c;目标文件&#xff0c;静态库文件&#xff0c;动态库文件都是使用ELF文件格式进行组织的。 ELF&#xff08;Executable and Linkable…

string的模拟实现 (6)

目录 1.string.h 2.string.cpp 3.test.cpp 4.一些注意点 本篇博客就学习下如何模拟实现简易版的string类&#xff0c;学好string类后面学习其他容器也会更轻松些。 代码实现如下&#xff1a; 1.string.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include <…

【野火模型】利用深度神经网络替代 ELMv1 野火参数化:机制、实现与性能评估

目录 一、ELMv1 野火过程表示法&#xff08;BASE-Fire&#xff09;关键机制野火模拟的核心过程 二、采用神经网络模拟野火过程三、总结参考 一、ELMv1 野火过程表示法&#xff08;BASE-Fire&#xff09; ELMv1 中的野火模型&#xff08;称为 BASE-Fire&#xff09;源自 Commun…

红宝书第四十七讲:Node.js服务器框架解析:Express vs Koa 完全指南

红宝书第四十七讲&#xff1a;Node.js服务器框架解析&#xff1a;Express vs Koa 完全指南 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、框架定位&#xff1a;HTTP服务器的工具箱 共同功能&#xff1a; 快…

嵌入式Linux设备使用Go语言快速构建Web服务,实现设备参数配置管理方案探究

本文探讨&#xff0c;利用Go语言及gin框架在嵌入式Linux设备上高效搭建Web服务器&#xff0c;以实现设备参数的网页配置。通过gin框架&#xff0c;我们可以在几分钟内创建一个功能完善的管理界面&#xff0c;方便对诸如集中器&#xff0c;集线器等没有界面的嵌入式设备的管理。…

【NLP 59、大模型应用 —— 字节对编码 bpe 算法】

目录 一、词表的构造问题 二、bpe(byte pair encoding) 压缩算法 算法步骤 示例&#xff1a; 步骤 1&#xff1a;初始化符号表和频率统计 步骤 2&#xff1a;统计相邻符号对的频率 步骤 3&#xff1a;合并最高频的符号对 步骤 4&#xff1a;重复合并直至终止条件 三、bpe在NLP中…

Python对ppt进行文本替换、插入图片、生成表格

目录 1. 安装pptx2. 文本替换和插入图片3. 生成表格 1. 安装pptx pip install python-pptx2. 文本替换和插入图片 文本通过占位符例如{{$xxx}}进行标记&#xff0c;然后进行替换&#xff1b;图片通过ppt中的图形和图片中的占位符进行标记ppt如下 具体实现 from pptx import …

AI(学习笔记第一课) 在vscode中配置continue

文章目录 AI(学习笔记第一课) 在vscode中配置continue学习内容&#xff1a;1. 使用背景2. 在vscode中配置continue2.1 vscode版本2.2 在vscode中下载continue插件2.2.1 直接进行安装2.2.2 在左下角就会有continue的按钮2.2.3 可以移动到右上角2.2.3 使用的时候需要login 2.3 配…

C++ (初始面向对象之继承,实现继承,组合,修饰权限)

初始面向对象之继承 根据面向对象的编程思路&#xff0c;我们可以把共性抽象出来封装成类&#xff0c;然后让不同的角色去继承这些类&#xff0c;从而避免大量重复代码的编写 实现继承 继承机制是面向对象程序设计中使代码可以复用的最重要的手段&#xff0c;它允许程序员在保…

每日搜索--12月

12.1 1. urlencode是一种编码方式,用于将字符串以URL编码的形式进行转换。 urlencode也称为百分号编码(Percent-encoding),是特定上下文的统一资源定位符(URL)的编码机制。它适用于统一资源标识符(URI)的编码,也用于为application/x-www-form-urlencoded MIME准备数…

一天一个java知识点----Tomcat与Servlet

认识BS架构 静态资源&#xff1a;服务器上存储的不会改变的数据&#xff0c;通常不会根据用户的请求而变化。比如&#xff1a;HTML、CSS、JS、图片、视频等(负责页面展示) 动态资源&#xff1a;服务器端根据用户请求和其他数据动态生成的&#xff0c;内容可能会在每次请求时都…

游戏报错?MFC140.dll怎么安装才能解决问题?提供多种MFC140.dll丢失修复方案

MFC140.dll 是 Microsoft Visual C 2015 运行库的重要组成部分&#xff0c;许多软件和游戏依赖它才能正常运行。如果你的电脑提示 "MFC140.dll 丢失" 或 "MFC140.dll 未找到"&#xff0c;说明系统缺少该文件&#xff0c;导致程序无法启动。本文将详细介绍 …

小白如何从0学习php

学习 PHP 可以从零开始逐步深入&#xff0c;以下是针对小白的系统学习路径和建议&#xff1a; 1. 了解 PHP 是什么 定义&#xff1a;PHP 是一种开源的服务器端脚本语言&#xff0c;主要用于 Web 开发&#xff08;如动态网页、API、后台系统&#xff09;。 用途&#xff1a;构建…

常见的 14 个 HTTP 状态码详解

文章目录 一、2xx 成功1、200 OK2、204 No Content3、206 Partial Content 二、3xx 重定向1、301 Moved Permanently2、302 Found3、303 See Other注意4、Not Modified5、307 Temporary Redirect 三、4xx 客户端错误1、400 Bad Request2、401 Unauthorized3、403 Forbidden4、4…

Linux Kernel 8

可编程中断控制器&#xff08;Programmable Interrupt Controller&#xff0c;PIC&#xff09; 支持中断&#xff08;interrupt&#xff09;的设备通常会有一个专门用于发出中断请求Interrupt ReQuest&#xff0c;IRQ的输出引脚&#xff08;IRQ pin&#xff09;。这些IRQ引脚连…

原子操作CAS(Compare-And-Swap)和锁

目录 原子操作 优缺点 锁 互斥锁&#xff08;Mutex&#xff09; 自旋锁&#xff08;Spin Lock&#xff09; 原子性 单核单CPU 多核多CPU 存储体系结构 缓存一致性 写传播&#xff08;Write Propagation&#xff09; 事务串行化&#xff08;Transaction Serialization&#…

【WPF】 在WebView2使用echart显示数据

文章目录 前言一、NuGet安装WebView2二、代码部分1.xaml中引入webview22.编写html3.在WebView2中加载html4.调用js方法为Echarts赋值 总结 前言 为了实现数据的三维效果&#xff0c;所以需要使用Echarts&#xff0c;但如何在WPF中使用Echarts呢&#xff1f; 一、NuGet安装WebV…

OpenCV 图像拼接

一、图像拼接的介绍 图像拼接是一种将多幅具有部分重叠内容的图像合并成一幅完整、无缝且具有更广阔视野或更高分辨率图像的技术。其目的是通过整合多个局部图像来获取更全面、更具信息价值的图像内容。 二、图像拼接的原理 图像拼接的核心目标是将多幅有重叠区域的图像进行准…