For AI agents: the complete documentation index is available at https://ifhover.github.io/leaf-ui/llms.txt, the full documentation bundle is available at https://ifhover.github.io/leaf-ui/llms-full.txt, and this page is available as Markdown at https://ifhover.github.io/leaf-ui/components/error-boundary.md.

ErrorBoundary 错误边界

展示内容异常时的备用界面。

基本用法

内容正常显示。

basic.tsx
function Content({ broken }: { broken: boolean }) {
  if (broken) throw new Error('Demo rendering error');
  return <p>内容正常显示。</p>;
}

import { Button, ErrorBoundary, Space } from '@ifhover/leaf-ui';

import { useState } from 'react';

export function ErrorBoundaryBasic() {
  const [broken, setBroken] = useState(false);
  return (
    <Space direction="vertical" align="stretch">
      <Button variant="outline" onClick={() => setBroken(true)}>
        模拟内容异常
      </Button>
      <ErrorBoundary onReset={() => setBroken(false)}>
        <Content broken={broken} />
      </ErrorBoundary>
    </Space>
  );
}

更多用法

备用界面只替换出错的区块。
advanced.tsx
function Content({ broken }: { broken: boolean }) {
  if (broken) throw new Error('Demo rendering error');
  return <span>备用界面只替换出错的区块。</span>;
}

import { Alert, Button, ErrorBoundary, Space } from '@ifhover/leaf-ui';

import { useState } from 'react';

export function ErrorBoundaryCustom() {
  const [broken, setBroken] = useState(false);
  return (
    <Space direction="vertical" align="stretch">
      <Button variant="outline" onClick={() => setBroken(true)}>
        测试备用界面
      </Button>
      <ErrorBoundary
        fallback={({ reset }) => (
          <Alert
            title="此区块不可用"
            description={
              <Button size="sm" variant="soft" onClick={reset}>
                再次尝试
              </Button>
            }
          />
        )}
        onReset={() => setBroken(false)}
        resetKeys={[broken]}
      >
        <Content broken={broken} />
      </ErrorBoundary>
    </Space>
  );
}

使用说明

捕获子组件渲染和生命周期错误。事件处理、异步请求与服务端渲染错误由操作或框架处理。通过 onError 上报异常,避免在用户界面显示内部堆栈。

类型

组装数据、定义回调和使用 ref 时,可以导入这些类型。

import type { ErrorBoundaryFallbackProps, ErrorBoundaryProps } from '@ifhover/leaf-ui';

ErrorBoundaryFallbackProps API

属性类型默认值说明
errorError必填错误对象或错误通知
reset() => void必填重置状态或重试

ErrorBoundaryProps API

属性类型默认值说明
childrenReactNode—内容或下级项目
fallbackReactNode | ((props: ErrorBoundaryFallbackProps) => ReactNode)—加载失败时的内容
resetKeysreadonly unknown[]—值变化时重置错误
onError(error: Error, info: ErrorInfo) => void—异常回调
onReset() => void—重置回调