mirror of
https://github.com/streamich/react-use.git
synced 2026-01-25 14:17:16 +00:00
35 lines
741 B
TypeScript
35 lines
741 B
TypeScript
import { useCallback, useEffect } from 'react';
|
|
|
|
const useBeforeUnload = (enabled: boolean | (() => boolean) = true, message?: string) => {
|
|
const handler = useCallback(
|
|
(event: BeforeUnloadEvent) => {
|
|
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;
|
|
}
|
|
|
|
window.addEventListener('beforeunload', handler);
|
|
|
|
return () => window.removeEventListener('beforeunload', handler);
|
|
}, [enabled, handler]);
|
|
};
|
|
|
|
export default useBeforeUnload;
|