要实现在用户点击浏览器前进或后退按钮、离开或刷新页面时弹出提示,需要使用beforeunload事件和window.confirm()方法。

在Next.js中,可以在页面组件的useEffect钩子函数中添加beforeunload事件监听器,如下所示:

import { useEffect } from 'react';

const MyComponent = () => {
  useEffect(() => {
    const confirmExit = (e) => {
      // 取消事件的默认行为
      e.preventDefault();
      // Chrome需要在返回前修改returnValue属性
      e.returnValue = '';

      // 弹出提示框
      const message = '确定要离开吗?';
      if (window.confirm(message)) {
        // 用户点击确定,继续执行离开操作
        window.removeEventListener('beforeunload', confirmExit);
      }
    };

    // 添加beforeunload事件监听器
    window.addEventListener('beforeunload', confirmExit);

    // 组件销毁时移除事件监听器
    return () => {
      window.removeEventListener('beforeunload', confirmExit);
    };
  }, []);

  return <div>My Component</div>;
};

export default MyComponent;

在上面的示例中,我们在useEffect钩子函数中添加了beforeunload事件的监听器。当用户点击浏览器的前进或后退按钮、离开或刷新页面时,会触发beforeunload事件。在事件处理函数中,我们取消了事件的默认行为,并修改了returnValue属性(在Chrome浏览器中需要修改)。然后,我们弹出一个提示框,询问用户是否确定离开页面。如果用户点击确定,我们移除beforeunload事件的监听器,允许页面继续执行离开操作。

请注意,由于Next.js使用了客户端路由,页面之间的切换并不会触发beforeunload事件。如果需要在页面之间切换时也弹出提示框,可以考虑使用其他方法,如RouterbeforePopState事件

nextjs 用户点击浏览器前进或者后退按钮或者离开、刷新页面弹出提示用户确定才能继续否则取消如果只是使用beforeunload那么后退或者前进是不起作用的

原文地址: https://www.cveoy.top/t/topic/inNE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录