Files
SenMeshNet/components/inspection/InspectionErrorBoundary.tsx

39 lines
1.2 KiB
TypeScript
Raw Normal View History

import React from "react";
/**
* 简易 ErrorBoundary,用于包裹巡检相关组件,
* 防止组件内部错误导致整个 AsidePanel 空白。
*/
export class InspectionErrorBoundary extends React.Component<
{ children: React.ReactNode; fallback?: React.ReactNode },
{ hasError: boolean; error: Error | null }
> {
constructor(props: { children: React.ReactNode; fallback?: React.ReactNode }) {
super(props);
this.state = { hasError: false, error: null };
}
static getDerivedStateFromError(error: Error) {
return { hasError: true, error };
}
componentDidCatch(error: Error, info: React.ErrorInfo) {
console.error("[InspectionErrorBoundary] 组件渲染错误:", error, info);
}
render() {
if (this.state.hasError) {
if (this.props.fallback) return this.props.fallback;
return (
<div className="p-3 rounded-md border border-destructive/30 bg-destructive/5 text-sm">
<div className="font-medium text-destructive mb-1">巡检配置加载失败</div>
<div className="text-xs text-muted-foreground font-mono">
{this.state.error?.message || "未知错误"}
</div>
</div>
);
}
return this.props.children;
}
}