错误边界 #

一、错误边界概述 #

1.1 什么是错误边界 #

错误边界是一种捕获子组件渲染错误的机制,防止整个应用崩溃。

jsx
import { ErrorBoundary } from 'solid-js';

function SafeComponent() {
  return (
    <ErrorBoundary fallback={<p>Something went wrong</p>}>
      <RiskyComponent />
    </ErrorBoundary>
  );
}

1.2 错误边界捕获的错误类型 #

捕获 不捕获
渲染期间的错误 事件处理器中的错误
生命周期方法中的错误 异步代码中的错误
子组件树中的错误 服务端渲染中的错误

二、基本用法 #

2.1 简单错误边界 #

jsx
function SafeComponent() {
  return (
    <ErrorBoundary fallback={<p>Something went wrong</p>}>
      <RiskyComponent />
    </ErrorBoundary>
  );
}

2.2 访问错误信息 #

jsx
function DetailedErrorBoundary() {
  return (
    <ErrorBoundary fallback={(err, reset) => (
      <div class="error-container">
        <h2>Error Occurred</h2>
        <p>{err.message}</p>
        <button onClick={reset}>Try Again</button>
      </div>
    )}>
      <ChildComponent />
    </ErrorBoundary>
  );
}

2.3 嵌套错误边界 #

jsx
function App() {
  return (
    <ErrorBoundary fallback={<AppError />}>
      <Header />
      <main>
        <ErrorBoundary fallback={<SidebarError />}>
          <Sidebar />
        </ErrorBoundary>
        <ErrorBoundary fallback={<ContentError />}>
          <Content />
        </ErrorBoundary>
      </main>
    </ErrorBoundary>
  );
}

三、实际应用 #

3.1 可复用错误边界 #

jsx
function ErrorFallback(props) {
  return (
    <div class="error-fallback">
      <h2>Oops! Something went wrong</h2>
      <p>{props.error.message}</p>
      <button onClick={props.resetErrorBoundary}>Try Again</button>
    </div>
  );
}

function SafeComponent(props) {
  return (
    <ErrorBoundary fallback={(err, reset) => (
      <ErrorFallback error={err} resetErrorBoundary={reset} />
    )}>
      {props.children}
    </ErrorBoundary>
  );
}

3.2 带日志的错误边界 #

jsx
function LoggingErrorBoundary(props) {
  return (
    <ErrorBoundary fallback={(err, reset) => {
      console.error('Error caught:', err);
      return props.fallback(err, reset);
    }}>
      {props.children}
    </ErrorBoundary>
  );
}

四、最佳实践 #

  1. 为不同区域设置独立的错误边界
  2. 提供有意义的错误信息
  3. 允许用户恢复或重试
  4. 记录错误到日志服务

五、总结 #

5.1 ErrorBoundary API #

参数 说明
fallback 错误显示组件或函数
children 子组件

5.2 fallback 函数参数 #

参数 说明
err 错误对象
reset 重置函数

5.3 最佳实践 #

  1. 关键组件使用错误边界包裹
  2. 提供错误恢复选项
  3. 记录错误日志
  4. 嵌套错误边界隔离错误
最后更新:2026-03-28