通信组件之provide 与 inject实现兄弟组件通信

简介: vue3 | 通信组件之provide 与 inject实现兄弟组件通信

一、vue3 | 通信组件之provide 与 inject实现兄弟组件通信

 通过共同祖先组件使用provide 与 inject来提供和注入状态,从而实现兄弟组件通信的示例。例子:祖先组件提供了一个名为 sharedState 的响应式状态,并通过 provide 函数将其提供给所有子组件。ChildA 和 ChildB 通过 inject 函数接收这个状态,并可以在需要时更新或显示它。代码如下:


二、共同的祖先组件

<script lang="ts" setup>

// 兄弟组件通信

import ChildA from '@/components/ChildA.vue'

import ChildB from '@/components/ChildB.vue'

import { provide ,reactive} from 'vue'

//提供了一个名为 SharedSate 的响应式状态

const SharedSate = reactive({

  message:'Change'

})

// 提供状态给子组件

provide('SharedSate',SharedSate)

</script>

三、子组件

ChildA.vue(子组件一)

<template>

   兄弟组件的组件A:{{ SharedSate1.message }}

   <button @click="updateMess">修改组件A</button>

</template>

<script lang="ts" setup>

import { inject } from 'vue'

// 注入共享状态  

const SharedSate1 = inject<{ message: string }>('SharedSate')

// 更新消息的方法  

const updateMess = () => {

   if (SharedSate1) {

       SharedSate1.message = 'Updated by ChildA';

   }

}

</script>

ChildB.vue(子组件二)

<template>

   兄弟组件的组件B:{{ SharedSate.message }}

   <button @click="updateMess">修改组件B</button>

</template>

<script lang="ts" setup>

import { inject } from 'vue'

// 注入共享状态  

const SharedSate = inject<{ message: string }>('SharedSate');

// 更新消息的方法  

function updateMess() {

   if (SharedSate) {

       SharedSate.message = 'Updated by ChildB';

   }

}

</script>

四、实际应用场景

用户认证状态:在导航栏、侧边栏和主内容区域的用户登录或注销状态

主题或布局偏好:更改网站的主题(如深色模式/浅色模式)或布局(如单列/双列布局)

五、结个尾

       注意,在 TypeScript 中使用 inject 时,你需要为注入的状态提供一个类型注解,以确保类型安全。如果多个组件之间共享大量状态,或者这些状态之间的依赖关系变得复杂,那么考虑使用 Vuex 或其他全局状态管理库可能是一个更好的选择。

目录
相关文章
|
机器学习/深度学习 算法 Java
数论中的十个基本概念
数论中的十个基本概念
|
4月前
|
Ubuntu 测试技术 数据处理
QF-Lib:用一个库搞定Python量化回测和策略开发
QF-Lib 是一个一体化的量化金融研究工具库,涵盖数据获取、策略回测、风险分析到报告生成全流程。支持多数据源接入与前瞻偏差防护,基于事件驱动架构,内置专业金融函数,模块化设计便于扩展,可快速搭建策略原型并自动生成PDF/Excel报告,提升量化研究效率。
729 3
QF-Lib:用一个库搞定Python量化回测和策略开发
|
JSON 资源调度 JavaScript
nodemon 启动问题:nodemon : 无法将“nodemon”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
【6月更文挑战第3天】在尝试运行`nodemon`时遇到错误,提示无法识别该命令。问题可能是缺少nodemon环境或系统不允许执行脚本。解决方法包括:首先尝试使用`npm install nodemon -g`全局安装nodemon,如果安装失败,可能需要以管理员权限打开PowerShell,执行`set-ExecutionPolicy RemoteSigned`,然后再次尝试安装。nodemon是一款用于Node.js开发的工具,能监控源码变化自动重启应用,常用于提高开发效率。安装后,通过`nodemon your-app.js`启动应用,可自定义配置如监听特定文件、扩展名或目录。
4782 1
|
6月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
713 6
|
JavaScript
vue中使用@scroll不生效的问题
vue中使用@scroll不生效的问题
1559 59
|
JavaScript
typeScript基础(3)_ts函数默认值和可选参数
本文介绍了在TypeScript中如何使用函数的默认值和可选参数。展示了如何为函数参数指定默认值,使得在调用函数时可以省略某些参数,以及如何定义可选参数。
1046 2
|
存储 资源调度 JavaScript
Vue3如何使用Pinia详细介绍、pinia持久化存储(pinia-plugin-persistedstate详细配置)
Vue3如何使用Pinia详细介绍、pinia持久化存储(pinia-plugin-persistedstate详细配置)
|
前端开发 JavaScript 编译器
不走弯路,纯前端如何把图片导出成视频!
【10月更文挑战第3天】不走弯路,纯前端如何把图片导出成视频!
958 3
|
JavaScript 前端开发
JavaScript while 循环
JavaScript while 循环
238 3

热门文章

最新文章