Vue3中provide和inject的用法示例
在 Vue3 中,provide 和 inject 用于实现跨层级组件通信。以下是一个简单的示例:
1. 父组件 (祖先组件) - 提供数据
javascript
复制
// ParentComponent.vue
import { provide, ref, reactive } from 'vue';export default {setup() {// 提供静态数据provide('message', 'Hello from Parent!');// 提供响应式数据const count = ref(0);provide('count', count);// 提供对象和方法const user = reactive({name: 'Alice',age: 25});const updateUser = () => {user.age++;};provide('userData', {user,updateUser});return { count };}
};
2. 子组件 (后代组件) - 注入数据
javascript
复制
// ChildComponent.vue
import { inject } from 'vue';export default {setup() {// 注入基本类型(带默认值)const message = inject('message', 'Default message');// 注入响应式数据const count = inject('count');// 注入对象和方法const { user, updateUser } = inject('userData');// 修改响应式数据const increment = () => {count.value++;};return {message,count,user,updateUser,increment};}
};
3. 模板使用示例
html
复制
<!-- ChildComponent.vue 模板部分 -->
<template><div><h3>Child Component</h3><p>Message: {{ message }}</p><p>Count: {{ count }}</p><p>User: {{ user.name }} ({{ user.age }})</p><button @click="increment">Increment Count</button><button @click="updateUser">Update User Age</button></div>
</template>
运行 HTML
关键点说明:
-
响应式数据:使用
ref/reactive创建响应式数据,注入后依然保持响应性 -
默认值:
inject('key', defaultValue)第二个参数为默认值 -
类型支持:可以注入任意类型(基本类型、对象、函数等)
-
代码组织:推荐使用 Symbol 作为 key 避免命名冲突(适用于大型项目)
符号键示例(可选)
javascript
复制
// keys.js
export const MESSAGE_KEY = Symbol('message');
export const COUNT_KEY = Symbol('count');// 父组件
import { MESSAGE_KEY, COUNT_KEY } from './keys';
provide(MESSAGE_KEY, 'Hello World');// 子组件
const message = inject(MESSAGE_KEY);
这个模式特别适合以下场景:
-
主题/样式配置
-
全局状态管理(简单场景)
-
多层嵌套组件通信
-
共享工具函数/实例
注意:对于复杂应用,建议使用 Pinia 进行状态管理,但对于简单的组件层级通信,provide/inject 更加轻量。
相关文章:
Vue3中provide和inject的用法示例
在 Vue3 中,provide 和 inject 用于实现跨层级组件通信。以下是一个简单的示例: 1. 父组件 (祖先组件) - 提供数据 javascript 复制 // ParentComponent.vue import { provide, ref, reactive } from vue;export default {setup() {// 提供静态数据p…...
分治-快排-75.颜色分类-力扣(LeetCode)
一、题目解析 给定一个数组将其元素按照0,1,,2三段式排序,并且在原地进行排序。 二、算法原理 解法:三指针 用cur遍历数组,left记录0的最左侧,right记录2的最右侧。 left初始值为-1,right的初…...
铅酸电池充电器方案EG1253+EG4321
参考: 基于EG1253EG4321铅酸电池(48V20AH)三段式充电器 屹晶微高性价比的电瓶车充电器方案——EG1253 电瓶电压 48V电瓶锂电池,其充满约为55V~56V,因此充电器输出电压为55V~56V; 若是48V铅酸电池,标称电压为48V&…...
Spring Boot 实现 Excel 导出功能(支持前端下载 + 文件流)
🧠 一、为什么用 EasyExcel? 在 Java 开发中,操作 Excel 的框架主要有: Apache POI(经典但慢、内存占用大) JXL(老旧不维护) Alibaba EasyExcel(阿里出品,…...
vue 中formatter
:formatter 是前端表格组件(如 Element UI、Vxe-Table 等)中用于 自定义单元格内容显示格式 的属性。它的核心作用是:将后端返回的原始数据(如编码、状态值等)转换为更友好、更易读的文本。 这段代码 :forma…...
协程?协程与线程的区别?Java是否支持协程?
一、前言 协程(Coroutine) 是一种轻量级的并发编程模型,允许在单线程内通过协作式多任务调度实现并发。由用户代码显式控制(用户态调度而非操作系统内核调度),避免了线程上下文切换的开销,适合…...
jsch(shell终端Java版)
学习笔记 Java SSH库使用简介:Apache sshd和JSch(Java Secure Channel) github - fork of the popular jsch library JSch学习笔记 web-shell - gitee代码 - 纯Java实现一个web shell登录Linux远程主机,技术选型 SpringBoot …...
Muduo网络库实现 [十六] - HttpServer模块
目录 设计思路 类的设计 模块的实现 公有接口 私有接口 疑问点 设计思路 本模块就是设计一个HttpServer模块,提供便携的搭建http协议的服务器的方法。那么这个模块需要如何设计呢? 这还需要从Http请求说起。 首先从http请求的请求行开始分析&…...
关于进程状态
目录 进程的各种状态 运行状态 阻塞状态 挂起状态 linux中的进程状态、 进程状态查看 S状态(浅睡眠) t 状态(追踪状态) T状态(暂停状态) 编辑 kill命令手册 D状态(深度睡眠&#…...
【MySQL】Read view存储的机制,记录可见分析
read view核心组成 1.1 事务id相关 creator_trx_id: 创建该read view的事务id 每开启一个事务都会生成一个 ReadView,而 creator_trx_id 就是这个开启的事务的 id。 m_ids: 创建read view时系统的活跃事务(未提交的事务)id集合 当前有哪些事…...
SQL注入 01
0x01 用户、脚本、数据库之间的关系 首先客户端发出了ID36的请求,脚本引擎收到后将ID36的请求先代入脚本的sql查询语句Select * from A where id 36 , 然后将此代入到数据库中进行查询,查到后将返回查询到的所有记录给脚本引擎,接…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.24)
11.2 案例-文件上传-简介 火狐浏览器可以看到文件上传传递的底层数据,而chrome对这一块数据进行了包装 在输出日志代码处打了一个断点,看服务端接收到的数据,在上传文件的保存地址中,可以看到,有三个临时文件&…...
计算机视觉cv2入门之视频处理
在我们进行计算机视觉任务时,经常会对视频中的图像进行操作,这里我来给大家分享一下,cv2对视频文件的操作方法。这里我们主要介绍cv2.VideoCapture函数的基本使用方法。 cv2.VideoCapture函数 当我们在使用cv2.VideoCapture函数时ÿ…...
【Linux】Rhcsa复习5
一、Linux文件系统权限 1、文件的一般权限 文件权限针对三类对象进行定义: owner 属主,缩写u group 属组, 缩写g other 其他,缩写o 每个文件针对每类访问者定义了三种主要权限: r:read 读 w&…...
FFmpeg:M3U8的AES加密
1、加密用的key,命令: openssl rand 16>enc.key 2、目的是生成一个enc.key文件 生成iv openssl rand -hex 16 生成后记录下来这个字符串 3、新建一个enc.keyinfo文件,内容有如下三行: key URIenc.key的路径,…...
VMware虚拟机走主机代理上网
🌐 VMware虚拟机走主机代理上网🔑 你是否也遇到过这样的困境?💡 在虚拟机中测试某个项目,却因为网络限制而寸步难行。今天,就让我们一起探索如何让VMware虚拟机轻松调用本机的代理上网工具,开启…...
百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计
一、百级Function系统的核心挑战 1.1 代码结构问题 代码膨胀现象:单个文件超过2000行代码路由逻辑复杂:巨型switch-case结构维护困难依赖管理失控:跨Function依赖难以追踪 // 传统实现方式的问题示例 switch functionName { case "fu…...
Cursor入门教程-JetBrains过度向
Cursor使用笔记 **前置:**之前博主使用的是JetBrains的IDE,VSCode使用比较少,所以会尽量朝着JetBrains的使用习惯及样式去调整。 一、设置语言为中文 如果刚上手Cursor,那么肯定对Cursor中的众多选项配置项不熟悉,这…...
【人工智能】Agent未来市场与技术潜力分析
Agent作为连接大模型与具体场景的桥梁,正在成为AI技术落地的核心载体。结合2025年的市场动态与技术趋势,其未来潜力可从以下多个维度展开分析: 一、市场前景:爆发式增长与多层级需求 市场规模与增速 全球AI Agent市场规模预计从2024年的51亿美元增至2030年的471亿美元(年复…...
计算机视觉与深度学习 | TensorFlow基本概念与应用场景:MNIST 手写数字识别(附代码)
TensorFlow 基本概念 TensorFlow 是一个开源的机器学习框架,由 Google 开发,核心概念包括: 张量(Tensor):多维数组,是数据的基本单位。计算图(Graph):早期版本中用于描述数据流和计算过程,2.x 默认启用即时执行(Eager Execution),兼顾灵活性和性能。层(Layers)…...
Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
CPU负载突然飙升,如截图: 根本原因,大家从各种博主上已知晓,现在提供自己的解决办法,亲测有效 一、设置开机自动禁用温度管理守护进程 1.创建脚本文件 mkdir -p ~/Scripts touch ~/Scripts/disable_thermald.sh …...
宝塔面板部署 Dify-latest 最新版本
一、本地部署Windows 版本宝塔面板 宝塔面板是一款简单容易上手使用的服务器管理软件,它可以帮助用户方便地管理服务器以及部署网站等。 (1)在宝塔面板官网的下载界面,选择 windows 版本下载。点此进入下载 (2&#x…...
《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端
《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端 《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端HTTP 概要理解 Web 服务器端无状态的 Stateless 协议请求消息(Request Message)的结构响应消息&#x…...
MCP(2)架构篇:深入理解MCP的设计架构
前言 在上一篇《MCP系列之基础篇》中,我们初步了解了MCP(模型上下文协议)的基本概念和价值。本篇文章将深入探讨MCP的技术架构,帮助开发者和技术爱好者更全面地理解这一协议的内部工作机制。我们将剖析MCP的核心组件、通信模型和工作流程,解析Host、Client和Server三者之…...
Origin将双Y轴柱状图升级为双向分组柱状图
当变量同时存在两个数值时的可视化时,往往会想到用双Y轴柱状图来表达我们的数据。 双Y轴柱状图是一种在同一图表中使用左右两个Y轴的可视化形式,常用于展示两组量纲不同或数值范围差异较大的数据。 双向分组柱状图是一种结合了双向柱状图和分组柱状图的…...
Ubuntu 22.04 更换 Nvidia 显卡后启动无法进入桌面问题的解决
原显卡为 R7 240, 更换为 3060Ti 后, 开机进桌面时卡在了黑屏界面, 键盘有反应, 但是无法进入 shell. 解决方案为 https://askubuntu.com/questions/1538108/cant-install-rtx-4060-ti-on-ubuntu-22-04-lts 启动后在开机菜单中(如果没有开机菜单, 需要按shift键), 进入recove…...
JavaScript 笔记 --- part 4 --- Web API (part 2)
(webAPI part2) DOM 基本操作 事件流 定义: 指的是事件完整执行过程中的流动路径 捕获阶段: 事件从最外层的窗口对象开始,逐层向内传播到目标元素,并触发相应的事件处理程序。 冒泡阶段: 事件从目标元素开始,逐层向外传播到最外层的窗口对象…...
测试基础笔记第六天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、操作系统1.什么是操作系统2.操作系统的常见分类 二、linux系统1.linux发行版本2.文件和路径3.远程连接操作常见的远程连接工具远程连接基本步骤 三、linux命令操…...
Edge Impulse 训练openMV分类模型(字母+数字)
前言 使用openMV Cam H7 Plus 固件4.5.9尝试多种方式均失败(模板匹配、ORB特征识别),还毁了一个sd卡,还是老老实实用Edge Impulse 训练吧 准备字母数字图片,使用Python生成,文件名要存成“A.jpg”这样&…...
ChatUI 3.0 正式发布,“对话式交互” 开源组件库
ChatUI 3.0 是阿里达摩院推出的 “对话式交互” 开源组件库,在智能对话领域具有诸多优势,以下为你详细介绍: 组件丰富实用:提供 50 多个基础组件,涵盖电商、零售、餐饮、出行等多种行业需求,包括对话式界面…...
