Remix 的 ErrorBoundary 很强,因为它和路由层级绑在一起。
import {
isRouteErrorResponse,
useRouteError,
} from "@remix-run/react";
export function ErrorBoundary() {
const error = useRouteError();
if (isRouteErrorResponse(error)) {
return (
<div>
<h2>{error.status} {error.statusText}</h2>
<p>{String(error.data ?? "当前泊位处理失败")}</p>
</div>
);
}
if (error instanceof Error) {
return (
<div>
<h2>系统故障</h2>
<p>{error.message}</p>
</div>
);
}
return <div>未知错误</div>;
}为什么这很重要?
因为在传统 SPA 里,常常是一处接口挂了,整个页面一片空白,或者全都落到一个全局错误页。
而 Remix 的路由边界意味着:
root
└── ships
└── ships.$shipId
└── ships.$shipId.edit如果最深层编辑泊位炸了:
- 上层导航还在
- 港区壳子还在
- 用户还能退回别的页面
- 不必整港停航
这就叫真正的局部故障隔离。