当前位置: 首页 > news >正文

React-router v7 第八章(边界处理)

边界处理

边界处理包含了错误处理ErrorBoundary 404页面等错误处理

404页面处理

404页面指的是当React-router路由匹配不到时,显示的页面,例如我们的路由是/home,/about,当你去跳转到一个不存在的路由比如/aaa时,就会显示404页面。
不过react-router自带的404页面太丑了,更多的时候我们需要自定义404页面。

配置

  • 使用*作为通配符,当路由匹配不到时,显示404页面
  • 使用Component: NotFound作为404页面组件
const router = createBrowserRouter([{path: '/index',Component: Layout,children: [{path: 'home',Component: Home,},{path: 'about',Component: About,},],},{path: '*', // [!code highlight] 通配符,当路由匹配不到时,显示404页面  Component: NotFound, // [!code highlight] 404页面组件},
]);

404.tsx

import { Link } from 'react-router'
export default function NotFound() {return (<div style={{height: '100vh',display: 'flex',flexDirection: 'column',alignItems: 'center',justifyContent: 'center',background: '#f5f5f5'}}><h1 style={{ fontSize: 96, color: '#1890ff', margin: 0 }}>404</h1><p style={{ fontSize: 24, color: '#888', margin: '16px 0 0 0' }}>抱歉,您访问的页面不存在</p><Linkto="/"style={{marginTop: 32,color: '#1890ff',fontSize: 18,textDecoration: 'underline'}}>返回首页</Link></div>)
}

在这里插入图片描述

ErrorBoundary

ErrorBoundary是用于捕获路由loader或action的错误,并进行处理。

如果loader或action抛出错误,会调用ErrorBoundary组件。

import NotFound from '../layout/404'; // 404页面组件
import Error from '../layout/error'; // 错误处理组件
const router = createBrowserRouter([{path: '/index',Component: Layout,children: [{path: 'home',Component: Home,ErrorBoundary: Error, //如果组件抛出错误,会调用ErrorBoundary组件},{path: 'about',loader: async () => {//throw new Response('Not Found', { status: 404, statusText: 'Not Found' }); 可以返回Response对象//也可以返回json等等throw {message: 'Not Found',status: 404,statusText: 'Not Found',data: '132131',}},Component: About,ErrorBoundary: Error, //如果loader或action抛出错误,会调用ErrorBoundary组件},],},{path: '*', Component: NotFound,},
]);

并且返回的错误信息可以通过一个hooksuseRouteError获取到

error.tsx

import { useRouteError } from 'react-router'export default function Error() {const error = useRouteError()return <div>{error.message}</div>
}

相关文章:

  • AI向量检索
  • DeepSeek提示词的技巧
  • URL混淆与权限绕过技术
  • Linux | WEB服务器的部署及优化
  • Doo全自动手机壳定制系统
  • 安全为上,在系统威胁建模中使用量化分析
  • 5G网络的安全挑战与应对策略:技术剖析与Python实战
  • 博图V20编译报错:备不受支持,无法编译。请更改为受支持的设备。
  • 解读《国家数据标准体系建设指南》:数据治理视角
  • [machine learning] Transformer - Attention (四)
  • Deepseek核心技术:模态穿透技术的实现原理与过程
  • 刷leetcodehot100返航版--哈希表5/5
  • OpenGl实战笔记(1)基于qt5.15.2+mingw64+opengl绘制三角形
  • Gradio全解20——Streaming:流式传输的多媒体应用(6)——构建视频流目标检测系统
  • Qt 信号槽机制底层原理学习
  • 安装SDL和FFmpeg
  • 005-nlohmann/json 基础方法-C++开源库108杰
  • 性能测试之性能调优
  • 机器学习朴素贝叶斯算法
  • 0-1背包问题基础概念
  • “模”范生上海,如何再进阶?
  • 厦大历史系教授林汀水辞世,曾参编《中国历史地图集》
  • 无畏契约新王诞生:属于电竞世界的凯泽斯劳滕奇迹
  • 海港通报颜骏凌伤停两至三周,国足面临门将伤病危机
  • 美国防部监察机构扩大“群聊门”事件调查范围
  • “网约摩托”在部分县城上线:起步价五六元,专家建议纳入监管