--- category: Utilities --- # createEventHook Utility for creating event hooks ## Usage Creating a function that uses `createEventHook` ```ts import { createEventHook } from '@vueuse/core'; export function useMyFetch(url) { const fetchResult = createEventHook(); const fetchError = createEventHook(); fetch(url) .then((result) => fetchResult.trigger(result)) .catch((error) => fetchError.trigger(error.message)); return { onResult: fetchResult.on, onError: fetchError.on, }; } ``` Using a function that uses `createEventHook` ```vue ``` ## Type Declarations ```ts /** * The source code for this function was inspired by vue-apollo's `useEventHook` util * https://github.com/vuejs/vue-apollo/blob/v4/packages/vue-apollo-composable/src/util/useEventHook.ts */ type Callback = IsAny extends true ? (...param: any) => void : [T] extends [void] ? (...param: unknown[]) => void : [T] extends [any[]] ? (...param: T) => void : (...param: [T, ...unknown[]]) => void; export type EventHookOn = (fn: Callback) => { off: () => void; }; export type EventHookOff = (fn: Callback) => void; export type EventHookTrigger = (...param: Parameters>) => Promise; export interface EventHook { on: EventHookOn; off: EventHookOff; trigger: EventHookTrigger; clear: () => void; } export type EventHookReturn = EventHook; /** * Utility for creating event hooks * * @see https://vueuse.org/createEventHook * * @__NO_SIDE_EFFECTS__ */ export declare function createEventHook(): EventHookReturn; ```