第11篇:Provide/Inject(跨组件通信)

news/2025/2/24 21:15:42/

目标:掌握跨层级组件通信的核心方式


1. 基础用法
<!-- 祖先组件 Ancestor.vue -->  
<script setup>  
import { provide } from 'vue'  // 提供静态数据  
provide('theme', 'dark')  // 提供响应式数据  
const count = ref(0)  
provide('count', count)  
</script>  <!-- 后代组件 Descendant.vue -->  
<script setup>  
import { inject } from 'vue'  // 注入数据(带默认值)  
const theme = inject('theme', 'light')  
const count = inject('count')  
</script>  
 

2. 响应式数据传递
<!-- 祖先组件 -->  
<script setup>  
import { provide, ref } from 'vue'  const user = ref({ name: 'Alice' })  
provide('user', user)  // 提供更新方法  
const updateUser = (newName) => {  user.value.name = newName  
}  
provide('updateUser', updateUser)  
</script>  <!-- 后代组件 -->  
<template>  <button @click="updateUser('Bob')">修改用户名</button>  <p>{{ user.name }}</p>  
</template>  <script setup>  
const user = inject('user')  
const updateUser = inject('updateUser')  
</script>  
 

3. 使用Symbol避免命名冲突
javascript">// keys.js  
export const THEME_KEY = Symbol('theme')  // 祖先组件  
import { THEME_KEY } from './keys'  
provide(THEME_KEY, 'dark')  // 后代组件  
const theme = inject(THEME_KEY)  
 

4. 实战场景
  1. 主题切换:全局主题配置

  2. 多语言支持:全局语言包

  3. 用户信息:跨多层传递用户数据

  4. UI组件库:配置全局默认样式


5. 注意事项
  • 不要滥用:优先考虑Props/Emits,仅在多层嵌套时使用

  • 响应式维护:通过ref/reactive包装数据

  • 类型安全:使用TS时建议定义注入数据的类型

interface User {  name: string  age: number  
}  const user = inject<User>('user')  
 

代码规范建议

  • 对重要数据提供更新方法(而非直接修改注入值)

  • 为注入数据设置合理的默认值

  • 使用Symbol管理大型应用的provide key


http://www.ppmy.cn/news/1574699.html

相关文章

AI回答:Linux C/C++编程学习路线

Linux C/C编程学习路线需要结合Linux系统特性和C/C语言的特点&#xff0c;以下是一个系统化的学习路径&#xff0c;适合从初学者到进阶者&#xff1a; 第一阶段&#xff1a;Linux基础 Linux操作系统基础 学习Linux基本命令&#xff1a;ls、cd、mkdir、rm、grep、find等。 理解…

从零开始:VirtualBox安装Ubuntu 24.04.1 LTS

博客系列&#xff1a;Ubuntu虚拟机搭建与Python开发环境配置全攻略 第一篇&#xff1a;从零开始&#xff1a;VirtualBox安装Ubuntu 24.04.1 LTS&#xff08;当前&#xff09;第二篇&#xff1a;解决VirtualBox卡顿问题&#xff1a;配置优化和常见错误排查第三篇&#xff1a;轻…

【HarmonyOS Next】地图使用详解(一)

背景 这系列文章主要讲解鸿蒙地图的使用&#xff0c;当前可以免费使用&#xff0c;并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能&#xff0c;轻松完成地图构建工作。需要注意的是&#xff0c;现在测试只能使用实体手机去…

软件架构设计:网络基础

一、计算机网络概述 计算机网络的定义 计算机网络是通过通信设备和线路将分散的计算机系统连接起来&#xff0c;实现资源共享和信息传递的系统。 计算机网络的分类 按覆盖范围&#xff1a;局域网&#xff08;LAN&#xff09;、城域网&#xff08;MAN&#xff09;、广域网&…

网络运维学习笔记 015网工初级(HCIA-Datacom与CCNA-EI)NAT网络地址转换

文章目录 NAT(Network Address Translation&#xff0c;网络地址转换)思科&#xff1a;1&#xff09;PAT2&#xff09;静态端口转换 华为&#xff1a;1&#xff09;EasyIP2&#xff09;NAT Server静态NAT&#xff1a;动态NAT&#xff1a;实验1&#xff1a;在R1上配置NAPT让内网…

快速入门Springboot+vue——MybatisPlus多表查询及分页查询

学习自哔哩哔哩上的“刘老师教编程”&#xff0c;具体学习的网站为&#xff1a;7.MybatisPlus多表查询及分页查询_哔哩哔哩_bilibili&#xff0c;以下是看课后做的笔记&#xff0c;仅供参考。 多表查询 多表查询[Mybatis中的]&#xff1a;实现复杂关系映射&#xff0c;可以使…

DeepSeek核心技术全景解析:架构革新与工程突破

一、颠覆性架构设计&#xff1a;混合专家系统&#xff08;DeepSeekMoE&#xff09; 架构创新原理 动态参数激活&#xff1a;每个Token仅激活37亿参数&#xff08;总参数量671B&#xff09;&#xff0c;通过细粒度专家划分&#xff08;256路由专家1共享专家&#xff09;实现&q…

基于ffmpeg+openGL ES实现的视频编辑工具-添加背景音乐(十一)

在视频编辑领域,为视频添加背景音乐并实现音频的完美融合是一项关键任务。在上一篇文章中,我们大体介绍了添加背景音乐的整体逻辑,而本文将深入探讨其中音频合并所依赖的滤镜逻辑,通过对相关代码的详细解读,揭示音频合并的核心技术。 一、音频合并滤镜类的初始化 AudioA…