
本文介绍如何在 react 中正确监听浏览器后退操作(如点击返回按钮),并在弹出确认模态框后,根据用户选择执行登出等关键业务逻辑。
在 react 单页应用(SPA)中,原生 popstate 事件常因路由库(如 React router v6+)接管历史栈而无法可靠触发,尤其在使用
✅ 推荐方案:使用 history 库监听路由跳转动作
React Router v6 已移除内置 history 对象,但可通过 createBrowserHistory(来自独立 history 包)创建可监听的历史实例:
npm install history
import { createBrowserHistory } from 'history'; const browserHistory = createBrowserHistory(); function App() { const [showLogoutModal, setShowLogoutModal] = useState(false); useEffect(() => { const unlisten = browserHistory.listen((update) => { if (update.action === 'POP') { // 检测到用户点击了浏览器后退按钮 console.log('Back button detected — showing logout confirmation'); setShowLogoutModal(true); } }); return () => unlisten(); // 清理监听器 }, []); const handleConfirmLogout = () => { // 执行登出逻辑:清除 token、重定向至登录页等 localStorage.removeItem('authToken'); browserHistory.replace('/login'); // 避免回退再次触发 }; const handleCancelLogout = () => { // 取消登出,手动“前进一步”以抵消后退(模拟浏览器前进) browserHistory.go(1); setShowLogoutModal(false); }; return (
{/* 主应用内容 */} {/* 路由配置... */} {/* 登出确认模态框 */} {showLogoutModal && (
