事件
Nuxt 提供了一个由 hookable 驱动的强大事件系统。
事件
使用事件是解耦应用程序的好方法,可以在代码的不同部分之间实现更灵活和模块化的通信。事件可以有多个彼此不依赖的监听器。例如,您可能希望每次订单发货时向用户发送电子邮件。与其将订单处理代码与电子邮件代码耦合在一起,不如发出一个事件,让监听器接收并用于发送电子邮件。
Nuxt 的事件系统由 unjs/hookable 驱动,这与 Nuxt 钩子系统使用的库相同。
创建事件和监听器
您可以使用 hook
方法创建自定义事件:
const nuxtApp = useNuxtApp()
nuxtApp.hook('app:user:registered', payload => {
console.log('A new user has registered!', payload)
})
要发出事件并通知任何监听器,请使用 callHook
:
const nuxtApp = useNuxtApp()
await nuxtApp.callHook('app:user:registered', {
id: 1,
name: 'John Doe',
})
您还可以使用负载对象在发射器和监听器之间启用双向通信。由于负载是通过引用传递的,监听器可以修改它以将数据发送回发射器。
const nuxtApp = useNuxtApp()
nuxtApp.hook('app:user:registered', payload => {
payload.message = 'Welcome to our app!'
})
const payload = {
id: 1,
name: 'John Doe',
}
await nuxtApp.callHook('app:user:registered', {
id: 1,
name: 'John Doe',
})
// payload.message 将是 'Welcome to our app!'
您可以使用 Nuxt DevTools 的 Hooks 面板检查所有事件。
增强类型
您可以增强 Nuxt 提供的钩子的类型。
import { HookResult } from "@nuxt/schema";
declare module '#app' {
interface RuntimeNuxtHooks {
'your-nuxt-runtime-hook': () => HookResult
}
interface NuxtHooks {
'your-nuxt-hook': () => HookResult
}
}
declare module 'nitropack' {
interface NitroRuntimeHooks {
'your-nitro-hook': () => void;
}
}