最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3 數(shù)據(jù)總線的實現(xiàn)

 更新時間:2026年04月05日 09:29:01   作者:幻象黑兔  
在Vue3中,可以使用mitt實現(xiàn)事件總線,mitt是一個輕量級的事件發(fā)布/訂閱庫,核心功能包括發(fā)布事件、訂閱事件和取消訂閱,下面就來介紹一下如何使用,感興趣的可以了解一下

在 Vue 開發(fā)中,組件通信 是一個非常重要的主題。對于父子組件之間的通信,我們可以通過 props/emit 來實現(xiàn)。然而,在 非父子組件 或 兄弟組件 之間進行通信時,傳統(tǒng)的 props/emit 就顯得力不從心了。這時,事件總線(Event Bus) 就派上了用場。

在 Vue 2 中,我們可以通過 new Vue() 創(chuàng)建一個事件總線實例,并使用 $emit$on$off 來實現(xiàn)事件的發(fā)布與訂閱。然而,在 Vue 3 中,這些 API 被移除了。幸運的是,我們可以借助一個輕量級的開源庫 —— mitt 來實現(xiàn)類似的功能。

什么是mitt?

mitt 是一個極簡的JavaScript事件發(fā)布/訂閱庫,體積僅有200字節(jié)左右,但卻功能強大。它可以在任何 JavaScript 環(huán)境中使用,包括 Vue、React 甚至原生 JS。mitt 的核心功能非常簡單:

  • 發(fā)布事件:通過 emit 方法觸發(fā)事件。
  • 訂閱事件:通過 on 方法監(jiān)聽事件。
  • 取消訂閱:通過 off 方法移除事件監(jiān)聽器。

如何在 Vue 3 中使用mitt?

1、安裝mitt

首先,我們需要通過 npm 安裝 mitt

npm i mitt

2、創(chuàng)建事件總線

接下來,我們創(chuàng)建一個事件總線實例

import mitt from "mitt";

const emitter = mitt();
export default emitter;

3、在組件中訂閱事件

<template>
  <div>
    <div>Bar: {{ date }}</div>
  </div>
</template>
<script setup lang="ts">
import { onBeforeMount, onMounted, ref } from 'vue';
import emitter from './emitter';

const date = ref()
onMounted(() => {
  emitter.on('bar', (data) => {
    date.value = data
  })
})

onBeforeMount(() => {
  emitter.off('bar')
})
</script>

4、在組件中發(fā)布事件

// Foo.vue
<template>
  <div>
    <span>Foo: </span>
    <button @click="click">觸發(fā)事件</button>
  </div>
</template>
<script setup lang="ts">
import emitter from './emitter';

function click() {
  emitter.emit('bar', new Date().toLocaleString());
}
</script>

mitt實現(xiàn)原理

miit的原理其實非常簡單,主要依賴于一個 Map 對象來存儲事件類型及其對應的處理函數(shù)。以下是mitt的簡化實現(xiàn):

function mitt() {
    const all = new Map();
    return {
        // 訂閱事件
        on(type, handler) {
            const handlers = all.get(type)
            if (handlers) {
                handlers.push(handler)
            } else {
                all.set(type, [handler])
            }
        },
        // 取消訂閱
        off(type, handler) {
            const handlers = all.get(type)
            if (!handlers) {
                return
            }
            if (handler) {
                const index = handlers.indexOf(handler)
                if (index > -1) {
                    handlers.splice(index, 1)
                }
            } else {
                all.set(type, [])
            }
        },
        // 發(fā)布事件
        emit(type, ...args) {
            const handlers = all.get(type);
            handlers?.slice().map(handler => {
                handler(...args)
            })
        }
    }
}

到此這篇關于Vue3 數(shù)據(jù)總線的實現(xiàn)的文章就介紹到這了,更多相關Vue3 數(shù)據(jù)總線內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Ant Design Vue table中列超長顯示...并加提示語的實例

    Ant Design Vue table中列超長顯示...并加提示語的實例

    這篇文章主要介紹了Ant Design Vue table中列超長顯示...并加提示語的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue3實現(xiàn)計算屬性的代碼詳解

    Vue3實現(xiàn)計算屬性的代碼詳解

    計算屬性對于前端開發(fā)來說算是經(jīng)常使用的一個能力了,本文將從代碼層面來給大家介紹下Vue3是如何實現(xiàn)計算屬性的,需要的朋友可以參考下
    2023-07-07
  • vue實現(xiàn)引入本地json的方法分析

    vue實現(xiàn)引入本地json的方法分析

    這篇文章主要介紹了vue實現(xiàn)引入本地json的方法,結合實例形式分析了vue.js加載本地json文件及解析json數(shù)據(jù)相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • Vue中如何實現(xiàn)在線預覽word文件、excel文件

    Vue中如何實現(xiàn)在線預覽word文件、excel文件

    這篇文章主要介紹了Vue中如何實現(xiàn)在線預覽word文件、excel文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 基于Vue實現(xiàn)拖拽功能

    基于Vue實現(xiàn)拖拽功能

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)拖拽功能,拖動方塊進行移動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解vue3自定義指令實現(xiàn)?v-focus?功能

    詳解vue3自定義指令實現(xiàn)?v-focus?功能

    在Vue3中,可以通過自定義指令來實現(xiàn)v-focus功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-05-05
  • element-ui?form表單的動態(tài)rules校驗功能實現(xiàn)

    element-ui?form表單的動態(tài)rules校驗功能實現(xiàn)

    在vue項目中,有時候可能會用到element-ui?form表單的動態(tài)rules校驗,這篇文章主要介紹了element-ui form表單的動態(tài)rules校驗,我們可以巧妙的運用element-ui form表單里面form-item的校驗規(guī)則來處理,本文結合實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • el-input輸入校驗不能為空格以及不能輸入全部為空的內容

    el-input輸入校驗不能為空格以及不能輸入全部為空的內容

    這篇文章主要給大家介紹了關于el-input輸入校驗不能為空格以及不能輸入全部為空的內容的相關資料,el-input驗證規(guī)則主要是為了確保輸入的內容符合特定的要求,需要的朋友可以參考下
    2023-10-10
  • vue.js中導出Excel表格的案例分析

    vue.js中導出Excel表格的案例分析

    這篇文章主要介紹了vue.js中如何導出Excel表格,在項目中經(jīng)常會遇到這樣的需求,今天小編分步驟通過實例代碼給大家詳細介紹,需要的朋友可以參考下
    2019-06-06
  • vue中ant-design-vue組件的安裝與使用

    vue中ant-design-vue組件的安裝與使用

    Ant Design Vue是使用Vue實現(xiàn)的遵循Ant Design設計規(guī)范的高質量UI組件庫,用于開發(fā)和服務于企業(yè)級中后臺產(chǎn)品,下面這篇文章主要給大家介紹了關于vue中ant-design-vue組件安裝與使用的相關資料,需要的朋友可以參考下
    2022-04-04

最新評論

苏州市| 象山县| 苍南县| 开平市| 西青区| 大悟县| 芮城县| 仁布县| 绥德县| 苍溪县| 北宁市| 驻马店市| 金湖县| 邓州市| 砚山县| 济源市| 奉节县| 夹江县| 邵阳县| 边坝县| 应用必备| 庆安县| 白朗县| 三台县| 定陶县| 浦北县| 应城市| 邯郸市| 绥江县| 清水河县| 南漳县| 建德市| 新乡县| 会同县| 贵南县| 平泉县| 新郑市| 平罗县| 彭阳县| 高州市| 大兴区|