跳到主要内容

createEventHook

分类
导出大小
247 B
上次更改
3 个月前

创建事件钩子的工具

用法

创建一个使用 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
>
/** * Utility for creating event hooks * * @see https://vueuse.org.cn/createEventHook * * @__NO_SIDE_EFFECTS__ */ export declare function
createEventHook
<
T
= any>():
EventHookReturn
<
T
>

来源

源代码文档

贡献者

Anthony Fu
wheat
SerKo
Robin
Anthony Fu
伊西·梅赫梅蒂
OrbisK
IlyaL
克里斯
拉曼·保罗
Doctorwu
Curt Grimes
吉约姆·肖
丶远方
阿米雷扎·扎尔克什
超杰
sun0day

更新日志

v13.6.0
d32f8 - refactor: 为所有纯函数添加 @__NO_SIDE_EFFECTS__ 注释 (#4907)
v13.1.0
c1d6e - feat(shared): 确保返回类型存在 (#4659)
v12.6.0
636b8 - 修复:多参数类型检查 (#4555)
v12.1.0
40265 - 特性:添加 clear 函数 (#4378)
v10.7.0
3733b - 修复:trigger 不应忽略假值 (#3561)
e48ca - 修复:使 createEventHook 联合类型能被正确推断 (#3569)
v10.6.0
6040e - 特性:允许 trigger 可选地不带参数 (#3507)

根据 MIT 许可证发布。