首页 > 其他分享 >vue3 | 通信组件之provide 与 inject实现兄弟组件通信

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

时间:2024-07-16 23:25:15浏览次数:14  
标签:状态 vue provide 通信 SharedSate 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>

四、实际应用场景

  1. 用户认证状态:在导航栏、侧边栏和主内容区域的用户登录或注销状态
  2. 主题或布局偏好:更改网站的主题(如深色模式/浅色模式)或布局(如单列/双列布局)

五、结个尾

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

标签:状态,vue,provide,通信,SharedSate,inject,组件
From: https://blog.csdn.net/weixin_69851346/article/details/140478332

相关文章

  • 这可能是本年度最好用的 Dagger2 使用教程 三(依赖注入器的依赖、子组件、Lazy、Provid
    在上一个文章中,我们介绍了Dagger中的限定和范围注解,现在我们将视线转移到依赖注入器来,先介绍这个组件的依赖的两种方式,再介绍两个常用的类型。强烈建议先看完上一个文章:这可能是最详细的Dagger2使用教程二(限定注解@Named、@Qulifier和范围注解@Singleton、@Scope)......
  • vue 使用svg文件图片或者组件方式
    代码<template><!--svg使用--><divclass="box"><div><!--设置stylefill:ref方式可以直接修改svg颜色样式--><svgstyle="fill:red"xmlns="http://www.w3.org/2000/svg"......
  • Intel Management Engine WMI Provider 2408.5.4.0 20240221 驱动程序 Intel管理引擎
    驱动程序"IntelManagementEngineWMIProvider2408.5.4.0"是指Intel管理引擎的一部分,它通过Windows管理仪表(WMI)提供对管理引擎功能的访问和管理。这些驱动程序通常用于管理和配置Intel管理引擎的功能,包括安全功能、远程访问以及系统监控等。如果您需要安装或更新这个驱......
  • openStack核心组件的工作流程
    目录openStack核心组件的工作流程1.Keystone1.1User1.2Credentials1.3Authentication1.4Token1.5Project1.6Service1.7Endpoint1.8Role1.9keystone综述2.glance2.1glance-api2.2glance-registry2.3backend2.4glance综述3.placement4.nova4.1nova-api4.2nova-s......
  • 59.Form组件
    Form组件【一】Django中的form组件1)功能可以帮我们渲染页面、校验数据、展示提示信息2)使用案例在App中创建一个py文件#引入fromdjangoimportforms#创建一个form组件类classLoginForm(forms.Form):username=forms.CharField(max_length=8,......
  • sqldumper.exe 是 SQL Server 的一个重要组件,专门用于捕获和处理关键错误,帮助管理员和
     sqldumper.exe的起源可以追溯到MicrosoftSQLServer的开发和运行时管理中。它作为SQLServer的一部分,主要用于处理数据库引擎遇到的关键错误和异常情况。具体来说,sqldumper.exe主要功能包括:异常处理和故障捕获:当SQLServer数据库引擎遇到严重错误时,如内存访问错误......
  • Laravel 组件
    创建组件命令phpartisanmake:componentAlertmake:component命令还将为组件创建视图模板。视图将放在resources/views/components目录中。为自己的应用程序编写组件时,组件会在app/View/components目录和resources/views/components目录中自动发现,因此通常不需要进一步......
  • vue2 简洁的行政区划选择组件封装
     vue2简洁的行政区划选择组件封装//判断变量是否为null或undefinedexportfunctionisNullOrEmpty(value){ returnvalue===null||value===undefined||value===''}//判断变量是否为null或undefinedexportfunctionisNullOrUndefined(value){ ret......
  • 2024-07-16 记录vue内置组件(ps:内容来自GPT)
    1. Transition和TransitionGroup用途:用于为单个元素或组件提供过渡效果。TransitionGroup则用于列表中的多个元素或组件的过渡效果。特点:Transition:只影响单个元素或组件,不会额外渲染DOM元素。TransitionGroup:渲染一个真实的DOM元素(默认为<span>),可以通过tag属性改变渲染......
  • Microsoft.Uev.SmbSyncProvider.dll文件丢失导致程序无法运行问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个Microsoft.Uev.SmbSyncProvider.dll文件(挑......