Skip to content

createEventHook

类别
导出体积
246 B
上次更改
8 months ago

用于创建事件钩子的实用工具

用法

创建一个使用 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>

类型声明

显示类型声明
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
<
T
> =
IsAny
<
T
> extends true
? (...
param
: any) => void
: [
T
] extends [void]
? (...
param
: unknown[]) => void
: [
T
] extends [any[]]
? (...
param
:
T
) => 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
:
Parameters
<
Callback
<
T
>>
) =>
Promise
<unknown[]>
export interface
EventHook
<
T
= any> {
on
:
EventHookOn
<
T
>
off
:
EventHookOff
<
T
>
trigger
:
EventHookTrigger
<
T
>
clear
: () => void
} export type
EventHookReturn
<
T
> =
EventHook
<
T
>
/** * 用于创建事件钩子的工具函数 * * @see https://vueuse.org/createEventHook * * @__NO_SIDE_EFFECTS__ */ export declare function
createEventHook
<
T
= any>():
EventHookReturn
<
T
>

源码

源码文档

贡献者

Anthony Fu
一纸忘忧
wheat
一纸忘忧
Vida Xie
SerKo
Robin
Anthony Fu
Isi Mehmeti
OrbisK
IlyaL
Chris
Raman Paulau
Doctorwu
Curt Grimes
Guillaume Chau
丶远方
Amirreza Zarkesh
超杰
sun0day

更新日志

d32f8 - refactor: add @__NO_SIDE_EFFECTS__ annotations to all pure functions (#4907)
c1d6e - feat(shared): ensure return types exists (#4659)
636b8 - fix: type check for multiple arguments (#4555)
40265 - feat: add clear function (#4378)
3733b - fix: trigger should not ignore falsy values (#3561)
e48ca - fix: make createEventHook union type can be inferred correctly (#3569)
6040e - feat: allow trigger to optionally have no parameters (#3507)