use-callback-handlers.ts 607 B

123456789101112131415161718192021
  1. import { useCallback, useRef } from 'react'
  2. export default function useCallbackHandlers() {
  3. const handlersRef = useRef(new Set<(...arg: any[]) => void>())
  4. const addHandler = useCallback((handler: (...args: any[]) => void) => {
  5. handlersRef.current.add(handler)
  6. }, [])
  7. const deleteHandler = useCallback((handler: (...args: any[]) => void) => {
  8. handlersRef.current.delete(handler)
  9. }, [])
  10. const callHandlers = useCallback((...args: any[]) => {
  11. for (const handler of handlersRef.current) {
  12. handler(...args)
  13. }
  14. }, [])
  15. return { addHandler, deleteHandler, callHandlers }
  16. }