主分支
分支
主分支 (6.23.1)开发分支
版本
6.23.1v4/5.xv3.x
isRouteErrorResponse

isRouteErrorResponse

如果 路由错误 是一个路由错误响应,则返回 true

import { isRouteErrorResponse } from "react-router-dom";

function ErrorBoundary() {
  const error = useRouteError();
  if (isRouteErrorResponse(error)) {
    return (
      <div>
        <h1>Oops!</h1>
        <h2>{error.status}</h2>
        <p>{error.statusText}</p>
        {error.data?.message && <p>{error.data.message}</p>}
      </div>
    );
  } else {
    return <div>Oops</div>;
  }
}

当从操作或加载器抛出响应时,它将被解包成一个 ErrorResponse,这样您的组件就不必处理解包的复杂性(这将需要 React 状态和效果来处理从 res.json() 返回的 promise)。

import { json } from "react-router-dom";

<Route
  errorElement={<ErrorBoundary />}
  action={() => {
    throw json(
      { message: "email is required" },
      { status: 400 }
    );
  }}
/>;

function ErrorBoundary() {
  const error = useRouteError();
  if (isRouteErrorResponse(error)) {
    error.status; // 400
    error.data; // { "message: "email is required" }
  }
}

如果用户访问的路由与应用程序中的任何路由都不匹配,React Router 本身将抛出一个 404 响应。