#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
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
error | Error | 必填 | 错误对象或错误通知 |
reset | () => void | 必填 | 重置状态或重试 |
#ErrorBoundaryProps API
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
children | ReactNode | — | 内容或下级项目 |
fallback | ReactNode | ((props: ErrorBoundaryFallbackProps) => ReactNode) | — | 加载失败时的内容 |
resetKeys | readonly unknown[] | — | 值变化时重置错误 |
onError | (error: Error, info: ErrorInfo) => void | — | 异常回调 |
onReset | () => void | — | 重置回调 |