主要頁面
分支
主要頁面 (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() 返回的承諾)

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 回應。