Eventos
O Nuxt fornece um sistema de eventos poderoso impulsionado por hookable.
Eventos
Usar eventos é uma ótima maneira de desacoplar sua aplicação e permitir uma comunicação mais flexível e modular entre diferentes partes do seu código. Eventos podem ter múltiplos ouvintes que não dependem uns dos outros. Por exemplo, você pode querer enviar um e-mail para seu usuário cada vez que um pedido for enviado. Em vez de acoplar seu código de processamento de pedidos ao seu código de e-mail, você pode emitir um evento que um ouvinte pode receber e usar para despachar um e-mail.
O sistema de eventos do Nuxt é impulsionado por unjs/hookable, que é a mesma biblioteca que impulsiona o sistema de hooks do Nuxt.
Criando Eventos e Ouvintes
Você pode criar seus próprios eventos personalizados usando o método hook
:
const nuxtApp = useNuxtApp()
nuxtApp.hook('app:user:registered', payload => {
console.log('Um novo usuário se registrou!', payload)
})
Para emitir um evento e notificar quaisquer ouvintes, use callHook
:
const nuxtApp = useNuxtApp()
await nuxtApp.callHook('app:user:registered', {
id: 1,
name: 'John Doe',
})
Você também pode usar o objeto payload para habilitar a comunicação bidirecional entre o emissor e os ouvintes. Como o payload é passado por referência, um ouvinte pode modificá-lo para enviar dados de volta ao emissor.
const nuxtApp = useNuxtApp()
nuxtApp.hook('app:user:registered', payload => {
payload.message = 'Bem-vindo ao nosso aplicativo!'
})
const payload = {
id: 1,
name: 'John Doe',
}
await nuxtApp.callHook('app:user:registered', {
id: 1,
name: 'John Doe',
})
// payload.message será 'Bem-vindo ao nosso aplicativo!'
Você pode inspecionar todos os eventos usando o painel de Hooks do Nuxt DevTools.
Aumentando Tipos
Você pode aumentar os tipos de hooks fornecidos pelo 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;
}
}
※Esta página é uma tradução não oficial da documentação oficial do Nuxt.js.
A página correspondente na documentação oficial está aqui:
https://nuxt.com/docs/3.x/guide/going-further/events