コンテンツにスキップ

createEventHook

カテゴリ
エクスポートサイズ
212 B
最終更新日
4ヶ月前

イベントフックを作成するためのユーティリティ

使い方

createEventHookを使用する関数を作成する

ts
import { createEventHook } from '@vueuse/core'

export function useMyFetch(url) {
  const fetchResult = createEventHook<Response>()
  const fetchError = createEventHook<any>()

  fetch(url)
    .then(result => fetchResult.trigger(result))
    .catch(error => fetchError.trigger(error.message))

  return {
    onResult: fetchResult.on,
    onError: fetchError.on,
  }
}
js
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,
  }
}

createEventHookを使用する関数を使用する

vue
<script setup lang="ts">
import { useMyFetch } from './my-fetch-function'

const { onResult, onError } = useMyFetch('my api url')

onResult((result) => {
  console.log(result)
})

onError((error) => {
  console.error(error)
})
</script>

型宣言

typescript
/**
 * 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<T> =
  IsAny<T> extends true
    ? (...param: any) => void
    : [T] extends [void]
      ? (...param: unknown[]) => void
      : (...param: [T, ...unknown[]]) => void
export type EventHookOn<T = any> = (fn: Callback<T>) => {
  off: () => void
}
export type EventHookOff<T = any> = (fn: Callback<T>) => void
export type EventHookTrigger<T = any> = (
  ...param: IsAny<T> extends true ? unknown[] : [T, ...unknown[]]
) => Promise<unknown[]>
export interface EventHook<T = any> {
  on: EventHookOn<T>
  off: EventHookOff<T>
  trigger: EventHookTrigger<T>
}
/**
 * Utility for creating event hooks
 *
 * @see https://vueuse.dokyumento.jp/createEventHook
 */
export declare function createEventHook<T = any>(): EventHook<T>

ソース

ソースドキュメント

貢献者

Anthony Fu
wheat
Chris
Raman Paulau
Doctorwu
Curt Grimes
Guillaume Chau
丶远方
Amirreza Zarkesh
超杰
sun0day

変更履歴

v10.7.0 2023/12/5 に公開
3733b - 修正: triggerがfalseの値も無視しないように修正 (#3561)
e48ca - 修正: createEventHookのユニオン型が正しく推論できるように修正 (#3569)
v10.6.0 2023/11/9 に公開
6040e - 機能: triggerにオプションでパラメータを持たないことを許可 (#3507)
v10.0.0-beta.0 2023/3/14 に公開
31347 - 機能: triggerでawaitできるように修正 (#2824)
dd514 - 修正(useEventBus,createEventHook)!: 同じ関数の重複登録を削除 (#2748)
v9.7.0 2022/12/16 に公開
fdd4d - 機能(createEeventHook): 自動破棄 (#2518)

MITライセンスの下でリリースされています。