React Router 中的错误处理提供了一个强大的系统来管理应用程序中的错误,无论它们是在路由、数据加载、表单提交还是组件渲染过程中发生的。本页面解释了 React Router 的错误处理机制如何工作以及如何在您的应用程序中有效地利用它们。
React Router 提供了几种集成的错误处理方法
来源
React Router 的错误处理建立在 React 的错误边界概念之上,但扩展了它以支持路由特定功能。当路由中发生错误(在渲染、加载或操作过程中)时,React Router 会捕获它并渲染最近的错误边界 UI。
路由可以使用以下任一方式定义自己的错误处理 UI:
errorElement 属性 - 当发生错误时提供要渲染的 React 元素ErrorBoundary 组件 - 在发生错误时渲染的类组件或函数组件来源
路由错误处理配置
当使用 ErrorBoundary 时,React Router 会将其内部转换为一个元素
来源
当未指定错误元素时,React Router 会提供一个默认错误元素。这有助于开发,显示错误信息,但在生产环境中应替换为自定义错误元素。
来源
React Router 会自动处理加载器和操作中抛出的错误,捕获它们并渲染最近的错误边界。
当加载器抛出错误时,React Router 会:
来源
与加载器类似,操作错误也会被捕获,并导致错误边界渲染。
来源
useRouteError 钩子允许您访问当前路由中抛出的错误。
来源
如果一个路由没有自己的错误处理,错误将冒泡到最近的具有错误处理的祖先路由。这会产生级联效应,允许集中式错误处理。
来源
这种实现可以在 `_renderMatches` 函数中看到,该函数负责查找要渲染的最高错误边界。
来源
React Router 错误处理的核心是 `RenderErrorBoundary` 组件。这是一个类组件,它:
来源
React Router 还包含一个专门的错误边界,用于使用 `
AwaitErrorBoundary 组件处理在解析延迟数据中的 Promise 时发生的错误。
来源
React Router 同时处理 JavaScript 错误(如 `Error` 实例)和从加载器/操作中抛出的 Response 对象。
isRouteErrorResponse 实用函数有助于区分这两种类型。
来源
在路由层级的关键点放置错误边界。
来源
在路由层级的不同级别配置错误元素。
来源
使用 `useRouteError` 钩子来适当处理不同类型的错误。
来源
React Router 提供了一个全面的错误处理系统,该系统:
该系统创建了一种健壮且用户友好的方式来处理应用程序中的错误,确保用户在出现问题时不会遇到空白屏幕或晦涩的错误消息。
来源