import { useEffect } from 'react'; import { isRouteErrorResponse, useRouteError } from 'react-router-dom'; import { Button } from '@/components/ui/button'; import { isChunkLoadError, reloadForStaleChunk } from '../utils/chunkLoad'; function errorMessage(error: unknown): string { if (isRouteErrorResponse(error)) { if (typeof error.data === 'string' && error.data) return error.data; if (error.data && typeof error.data === 'object' && 'message' in error.data) { const m = (error.data as { message?: unknown }).message; if (typeof m === 'string' && m) return m; } return error.statusText || `错误 ${error.status}`; } if (error instanceof Error) return error.message; return String(error ?? '未知错误'); } /** * React Router 路由级错误页。 * 发版后动态模块 404 时自动刷新;其它错误给出手动刷新入口。 */ export default function AppRouteError() { const error = useRouteError(); const chunkMiss = isChunkLoadError(error); useEffect(() => { if (chunkMiss) reloadForStaleChunk(); }, [chunkMiss]); if (chunkMiss) { return (

正在更新页面

检测到程序已更新,正在自动刷新以加载最新版本…

); } return (
500

页面加载出错

{errorMessage(error)}

); }