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" }
}
}