23.useUnload

文化   2024-12-01 17:08   中国香港  

在 Web 应用开发中,处理页面卸载(unload)事件是一个重要但常常被忽视的方面。无论是提醒用户保存未保存的更改,还是执行一些清理操作,都需要在用户即将离开页面时进行处理。useUnload 钩子提供了一种简洁的方式来在 React 组件中处理 beforeunload 事件,使得在用户试图关闭或刷新页面时执行自定义逻辑变得简单。以下是如何实现和使用这个自定义钩子:

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('Are you sure you want to leave?');
    if (exit) window.close();
  });
  return <div>Try closing the window.</div>;
};

ReactDOM.createRoot(document.getElementById('root')).render(
  <App />
);

这个技巧的关键点包括:

  1. 使用 useRef 来存储回调函数,避免不必要的效果重新运行。
  2. 使用 useEffect 来添加和移除 beforeunload 事件监听器。
  3. 在组件卸载时清理事件监听器,防止内存泄漏。

大迁世界
掘金LV8,思否10万+的作者。一个热爱前端的创业者。
 最新文章