全书目录

第三十一篇:Remix 完全指南 —— Web 原生航运港宇宙

十六、错误处理:码头出事,不要炸掉整个港

1 分钟 172 字 第 579 / 962 个阅读单元

Remix 的 ErrorBoundary 很强,因为它和路由层级绑在一起。

tsx
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 的路由边界意味着:

text
root
└── ships
    └── ships.$shipId
        └── ships.$shipId.edit

如果最深层编辑泊位炸了:

  • 上层导航还在
  • 港区壳子还在
  • 用户还能退回别的页面
  • 不必整港停航

这就叫真正的局部故障隔离