@r-use/use-before-unload
Version:
The next-gen react hooks library. (useBeforeUnload module)
26 lines (23 loc) • 656 B
JavaScript
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 };