通信组件之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 或其他全局状态管理库可能是一个更好的选择。

目录
相关文章
|
2月前
|
JavaScript
在 Vue 3 组件通信方式中,Provide / Inject 与 Vuex 的区别是什么?
在 Vue 3 组件通信方式中,Provide / Inject 与 Vuex 的区别是什么?
152 65
|
1月前
|
API
Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
Vue3组件通信全解析:利用props、emit、provide/inject跨层级传递数据,expose与ref实现父子组件方法调用
510 0
|
1月前
qiankun框架中基于actions机制实现主应用与子应用间的双向通信
qiankun框架中基于actions机制实现主应用与子应用间的双向通信
136 0
|
2月前
|
存储 JavaScript 安全
组件通信——provide 和 inject 实现爷孙组件通信
组件通信——provide 和 inject 实现爷孙组件通信
|
2月前
Vue3基础(十san)___父子组件通信___props、emit___provide、inject
文章介绍了Vue3中父子组件通信的两种方式:通过`props`和`emit`传递数据和事件,以及使用`provide`和`inject`在组件树中传递数据。
57 0
Vue3基础(十san)___父子组件通信___props、emit___provide、inject
|
6月前
|
存储 JavaScript 前端开发
父子组件通信:有效地在Vue组件树中传递数据
【4月更文挑战第24天】Vue.js中的组件通信是实现可维护和可扩展代码的关键。遵循单向数据流原则,数据从父组件通过`props`传给子组件,子组件通过`$emit`触发事件响应。常用通信方式包括:1) `Props`和`Events`基础通信;2) `Provide / Inject`跨级通信;3) 使用Vuex管理复杂状态;4) 共享祖先组件或Vuex处理非父子组件通信;5) 少量使用`ref`和`$parent / $children`直接访问。选择合适的方式能优化应用性能和用户体验。
73 0
|
6月前
|
JavaScript
Vue 父子组件通信 兄弟组件通信 深层组件通信 方式一览
Vue 父子组件通信 兄弟组件通信 深层组件通信 方式一览
47 0
|
6月前
|
前端开发
React中兄弟组件通信和组件跨级传递Context的使用
React中兄弟组件通信和组件跨级传递Context的使用
|
前端开发
React-跨组件通讯-events
React-跨组件通讯-events
113 1
|
JavaScript API
vue组件通讯之provide / inject
vue组件通讯之provide / inject
60 0