useEventForwarder
创建一个自动转发事件的对象,将事件委托给提供的 emit
函数,并允许对指定事件应用自定义处理逻辑。
@movk-repo/shared/hooks/useEventForwarder
参数
ts
function useEventForwarder<
T extends Record<string, (...args: any[]) => any>,
E extends (...args: any[]) => any,
>(
emit: E,
emitsDef: T,
customHandlers?: Partial<{ [K in keyof T]: (...args: Parameters<T[K]>) => void }>,
): { [K in keyof T]: (...args: Parameters<T[K]>) => void }
emit
用于触发事件的函数,例如 Vue 的 defineEmits
返回的函数。
- 类型: 函数
E
- 描述: 接受事件名称及对应参数,负责触发事件。
emitsDef
事件定义对象。
- 类型:
T
(对象类型,所有事件名称及对应的触发函数) - 描述: 包含所有事件名称,并为类型推导提供支持。
customHandlers
可选的自定义事件处理器对象,用于覆盖默认的事件转发逻辑。
- 类型:
Partial<{ [K in keyof T]: (...args: Parameters<T[K]>) => void }>
- 描述: 指定某些事件的特殊处理逻辑。如果对应事件存在自定义处理器,则使用该逻辑而非默认转发。
示例
ts
import { useEventForwarder } from '@movk-repo/shared'
import { defineEmits } from 'vue'
const myEmits = {
add: (_payload: any) => true,
remove: (_payload: any) => true,
} as const
const emit = defineEmits(myEmits)
// 使用 useEventForwarder 生成事件转发器,支持自定义处理器
const forwardedEvents = useEventForwarder(emit, myEmits, {
add: (payload) => {
console.log('Custom handler for add event', payload)
emit('add', payload)
}
})
// 在模板中将 forwardedEvents 传给 v-on
// <MyComponent v-on="forwardedEvents" />