UNPKG

@r-use/use-before-unload

Version:

The next-gen react hooks library. (useBeforeUnload module)

26 lines (23 loc) 656 B
import { useCallback, useEffect } from 'react'; import { on, off } from '@r-use/shared'; const useBeforeUnload = (enabled = true, message) => { const handler = useCallback((event) => { const finalEnabled = typeof enabled === "function" ? enabled() : true; if (!finalEnabled) { return; } event.preventDefault(); if (message) { event.returnValue = message; } return message; }, [enabled, message]); useEffect(() => { if (!enabled) { return; } on(window, "beforeunload", handler); return () => off(window, "beforeunload", handler); }, [enabled, handler]); }; export { useBeforeUnload };