React useUnload钩子
处理beforeunload
窗口事件。
- 使用
useRef()
钩子为回调函数fn
创建一个引用。 - 使用
useEffect()
钩子和EventTarget.addEventListener()
来处理'beforeunload'
事件(当用户即将关闭窗口时)。 - 使用
EventTarget.removeEventListener()
在组件卸载后进行清理。
const useUnload = fn => {
const cb = React.useRef(fn);
React.useEffect(() => {
const onUnload = cb.current;
window.addEventListener('beforeunload', onUnload);
return () => {
window.removeEventListener('beforeunload', onUnload);
};
}, [cb]);
};
const App = () => {
useUnload(e => {
e.preventDefault();
const exit = confirm('确定要离开吗?');
if (exit) window.close();
});
return <div>尝试关闭窗口。</div>;
};
ReactDOM.createRoot(document.getElementById('root')).render(
<App />
);