Skip to content

useEventBus

Category
Export Size
282 B
Last Changed
2 weeks ago

A basic event bus.

Demo

News channel:
Television:
--- no signal ---

Usage

ts
import { 
useEventBus
} from '@vueuse/core'
const
bus
=
useEventBus
<string>('news')
function
listener
(
event
: string) {
console
.
log
(`news: ${
event
}`)
} // listen to an event const
unsubscribe
=
bus
.
on
(
listener
)
// fire an event
bus
.
emit
('The Tokyo Olympics has begun')
// unregister the listener
unsubscribe
()
// or
bus
.
off
(
listener
)
// clearing all listeners
bus
.
reset
()
js
import { useEventBus } from '@vueuse/core'
const bus = useEventBus('news')
function listener(event) {
  console.log(`news: ${event}`)
}
// listen to an event
const unsubscribe = bus.on(listener)
// fire an event
bus.emit('The Tokyo Olympics has begun')
// unregister the listener
unsubscribe()
// or
bus.off(listener)
// clearing all listeners
bus.reset()

Listeners registered inside of components setup will be unregistered automatically when the component gets unmounted.

TypeScript

Using EventBusKey is the key to bind the event type to the key, similar to Vue's InjectionKey util.

ts
// fooKey.ts
import type { 
EventBusKey
} from '@vueuse/core'
export const
fooKey
:
EventBusKey
<{
name
:
foo
}> =
Symbol
('symbol-key')
js
export const fooKey = Symbol('symbol-key')
ts
import { 
useEventBus
} from '@vueuse/core'
import {
fooKey
} from './fooKey'
const
bus
=
useEventBus
(
fooKey
)
bus
.
on
((
e
) => {
// `e` will be `{ name: foo }` })

Type Declarations

Show Type Declarations
ts
export type 
EventBusListener
<
T
= unknown,
P
= any> = (
event
:
T
,
payload
?:
P
,
) => void export type
EventBusEvents
<
T
,
P
= any> =
Set
<
EventBusListener
<
T
,
P
>>
export interface
EventBusKey
<
T
> extends Symbol {}
export type
EventBusIdentifier
<
T
= unknown> =
EventBusKey
<
T
> | string | number
export interface
UseEventBusReturn
<
T
,
P
> {
/** * Subscribe to an event. When calling emit, the listeners will execute. * @param listener watch listener. * @returns a stop function to remove the current callback. */
on
: (
listener
:
EventBusListener
<
T
,
P
>) =>
Fn
/** * Similar to `on`, but only fires once * @param listener watch listener. * @returns a stop function to remove the current callback. */
once
: (
listener
:
EventBusListener
<
T
,
P
>) =>
Fn
/** * Emit an event, the corresponding event listeners will execute. * @param event data sent. */
emit
: (
event
?:
T
,
payload
?:
P
) => void
/** * Remove the corresponding listener. * @param listener watch listener. */
off
: (
listener
:
EventBusListener
<
T
>) => void
/** * Clear all events */
reset
: () => void
} export declare function
useEventBus
<
T
= unknown,
P
= any>(
key
:
EventBusIdentifier
<
T
>,
):
UseEventBusReturn
<
T
,
P
>

Source

SourceDemoDocs

Contributors

Anthony Fu
Anthony Fu
TuiMao233
SerKo
jahnli
丶远方
Haoqun Jiang
sun0day
webfansplz
Jairo Blatt

Changelog

d32f8 - refactor: add @__NO_SIDE_EFFECTS__ annotations to all pure functions (#4907)
0a9ed - feat!: drop Vue 2 support, optimize bundles and clean up (#4349)

Released under the MIT License.

close