use-callback-handlers.js 674 B

123456789101112131415161718192021222324252627282930313233
  1. import { useCallback, useState } from 'react'
  2. export default function useCallbackHandlers() {
  3. const [handlers, setHandlers] = useState(new Set())
  4. const addHandler = useCallback(
  5. handler => {
  6. setHandlers(prev => new Set(prev.add(handler)))
  7. },
  8. [setHandlers]
  9. )
  10. const deleteHandler = useCallback(
  11. handler => {
  12. setHandlers(prev => {
  13. prev.delete(handler)
  14. return new Set(prev)
  15. })
  16. },
  17. [setHandlers]
  18. )
  19. const callHandlers = useCallback(
  20. (...args) => {
  21. for (const handler of handlers) {
  22. handler(...args)
  23. }
  24. },
  25. [handlers]
  26. )
  27. return { addHandler, deleteHandler, callHandlers }
  28. }