Skip to content

createEventHook

类别
导出体积
247 B
上次更改
2 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
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)