chore: consolidate new foundation and archive v1 (#1495)
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
---
|
||||
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<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,
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
Using a function that uses `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>
|
||||
```
|
||||
|
||||
## 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<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/createEventHook
|
||||
*
|
||||
* @__NO_SIDE_EFFECTS__
|
||||
*/
|
||||
export declare function createEventHook<T = any>(): EventHookReturn<T>;
|
||||
```
|
||||
Reference in New Issue
Block a user