首页 > 其他分享 >vue3 常用的几种组件通讯方式

vue3 常用的几种组件通讯方式

时间:2024-08-28 15:15:46浏览次数:4  
标签:通讯 provide mitt 参数 vue3 组件 import emitter

vue3 常用的几种组件通讯方式,大致如下

  • Props/Emit
  • Pinia
  • 事件总线(mitt)
  • Provide/Inject
  • 浏览器本地存储

 

1. Props / Emit

注释:prop属性名称 / 方法名称的格式,采用 camelCase 与 kebab-case。

 

1.1 props

(1)上游组件设置 prop 值(通过 v-bind 或 冒号)

 或者

 

(2)下游组件接收 prop 值 (通过 defineProps 方法)

import { defineProps } from 'vue' 

更多详见:https://cn.vuejs.org/guide/components/props.html

 

1.2 Emit 

(1)上游组件:接收来自下游组件的方法触发

 

(2)下游组件:主动触发上游组件的方法 

或者

import { defineEmits } from 'vue' 

 

  

2. Pinia

  详见 vue3的 store (Pinia) 

 

3. 事件总线(第三方库mitt)

   第一步:安装 mitt    npm install mitt -save

 

  第二步:初始化 mitt,即 新建一个 mitt.js 文件,然后写入如下内容

    import mitt from 'mitt'

    const emitter = new mitt()

    export default emitter


  第三步:触发 mitt

import emitter from '@/utils/mitt'

function handleClick() {

  emitter.emit('on-button-click', true);
}


  第四步:接收 mitt
    import { onMounted, onUnmounted } from 'vue';
    import emitter from '@/utils/mitt'

    function onFoo(e) {  console.log(' 触发了!');  }

    // 监听
    onMounted(() => {
      emitter.on('on-button-click', onFoo);
    });

    // 移除
    onUnmounted(() => {
      emitter.off('on-button-click',  onFoo);
    });

 

4. Provide/Inject

  跨组件通讯的情况中,有时不需要临近组件的数据,而是想要直接获取更远的祖级或孙级组件的数据。

  采用 props 的逐级数据传递显然比较麻烦,还需要注意中间组件的传递问题,如下图:

  provide-inject 的依赖注入方式,(就是在希望尽量避免 props逐级传递 可能出现问题的情况下而产生的),它无论层级有多深,都可以注入由祖组件提供给整条链路的依赖。

   以下是 provide-inject 的使用方式:

  (1)提供数据 provide()

    注释:一个组件可以多次调用 provide(), provide() 函数接收两个参数。

      • 第一个参数是注入名,可以是一个字符串或是一个 Symbol
      • 第二个参数是提供的值,值可以是任意类型,包括响应式的状态

     特殊情况下,还可以在整个应用层面提供依赖,如下

 

  (2)注入数据 inject()

 

     注释:inject() 函数有三个参数

      • 第一个参数是注入的 key,与provide()函数的第一个参数对应
      • 第二个参数是可选的默认值,即在没有匹配到 key 时使用的默认值
      • 第三个参数是可选的 boolean 值,表示第二个参数是否被当作一个工厂函数,如果是,则第二个参数必须是工厂函数

 

 

5. 浏览器本地存储

采用 localstorage/sessionstorage 等存储在浏览器本地,然后通过 pinia 或 侦听器 来进一步处理,实现实时更新

 

 

 

翻译

搜索

复制

标签:通讯,provide,mitt,参数,vue3,组件,import,emitter
From: https://www.cnblogs.com/bky419/p/18380088

相关文章

  • Vue3知识点
    什么是Vue3用于构建用户界面的渐进式框架Vue2和Vue3的区别响应式系统的重写:使用Proxy代替defineProperty实现数据响应式。重写虚拟DOM的实现和Tree-Shaking销毁和卸载的改进,销毁前不需要执行额外的操作生命周期的添加新增的APIvue3是组合式api,vue2是选项式api......
  • Vue3项目开发——新闻发布管理系统(四)
    文章目录七、登录&注册页面设计开发2、登录&注册页面设计3、表单校验规则设置七、登录&注册页面设计开发2、登录&注册页面设计登录页面如下:点击“注册→”,切换到注册页面:点击“←返回”,又可以切换回登录页面。页面布局是这么设计的:1、整个页面通过L......
  • 【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话
    引言在三年前,写智能小车的时候,当时小车上有一个摄像头需要采集,实现推拉流的操作,技术选型当时第一版用的是nginx的rtmp的推拉流,服务器的配置环境是centos,2H4G3M的一个配置,nginx的rtmp的延迟是20秒,超慢,后来研究了SRS以及ZLMediaKit这两个开源的推拉流服务器,没记错的话,两个......
  • 使用 nuxi add 快速创建 Nuxt 应用组件
    title:使用nuxiadd快速创建Nuxt应用组件date:2024/8/28updated:2024/8/28author:cmdragonexcerpt:通过使用nuxiadd命令,你可以快速创建Nuxt应用中的各种实体,如组件、页面、布局等。这可以极大地提高开发效率,减少手动创建文件的工作量。希望本文的示例和解释......
  • 基恩士SR-X80系列扫码枪EIP通讯 ( 汇川AM401<->基恩士SR-X80 )
    第一步:扫码枪设置1,基恩士扫码枪IP地址设置 2,扫码枪EIP设置第二步:PLC设置及编程1,EDS文件导入  2,EIP配置 3,程序VARx触发读码:BOOL;接收数据长度:UINT;接收数据:ARRAY[0..127]OFBYTE;str接收数据:STRING;TRIG0:R_TR......
  • vue:父子组件的通信
    上一篇:vue组件化开发在上一篇文章中,我们申明了一点,那就是组件之间是独立的,除非构建了通信。组件间为什么要构建通信?在单一文件中写上整个网站的代码逻辑,这无疑使得维护成本巨大。所以我们选择了组件化开发,把组件间独立起来,这样谁也不干涉谁,是谁的逻辑就在谁的文件中实现......
  • 【PyQt5 应用程序】PyQt基础组件:按钮
    在任何图形用户界面(GUI)应用程序中,按钮是最基本也是最频繁使用的组件之一。它们是用户与应用程序交互的主要方式之一。在PyQt中,按钮可以通过QPushButton类创建,它提供了丰富的功能,包括显示文本、图像,以及响应点击事件。本节将引导你了解如何在PyQt应用中创建和使用按钮,并通过......
  • vue3 自定义hooks(组合式函数)
    什么是hooks自定义hooks是Vue3组合式函数的别称。在Vue应用的概念中,“组合式函数”(Composables)是一个利用Vue的组合式API来封装和复用有状态逻辑的函数。命名规范组合式函数约定用驼峰命名法命名,并以“use”作为开头。以便识别它们是可复用的逻辑单元。例如,u......
  • MalusAdmin--- .NET 和 Vue3 实现的开源权限管理系统
    前言今天推荐一款用.NET和Vue3实现的开源权限管理系统。它的界面清爽干净,功能强大,还具备灵活的角色权限分配功能,能够满足不同规模企业的管理需求。无论你是开发新手还是大神,都能轻松上手,快速搭建起自己的权限管理体系。别再犹豫了,赶快来试试吧!项目简介Malus是海棠的意思,顾......
  • Git组件介绍
    写在前面今天我们来学习一下Git。Git是一个分布式版本控制系统,用于跟踪文件的更改和管理多个版本的代码。#Git使用指南下载与安装下载GitforWindowsv2.46.0安装选择好路径,直接点击“下一步”完成安装即可。基本设置设置名称gitconfig--globaluser.name"Your......