Implement robust error handling in React applications
# Error Boundary Complete Guide for Google Antigravity
Build resilient React applications with comprehensive error handling using Google Antigravity IDE.
## Class-Based Error Boundary
```typescript
// components/error-boundary.tsx
import React, { Component, ErrorInfo, ReactNode } from "react";
interface Props {
children: ReactNode;
fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);
onError?: (error: Error, errorInfo: ErrorInfo) => void;
}
interface State {
hasError: boolean;
error: Error | null;
}
export class ErrorBoundary extends Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = { hasError: false, error: null };
}
static getDerivedStateFromError(error: Error): State {
return { hasError: true, error };
}
componentDidCatch(error: Error, errorInfo: ErrorInfo) {
console.error("Error caught by boundary:", error, errorInfo);
this.props.onError?.(error, errorInfo);
}
reset = () => {
this.setState({ hasError: false, error: null });
};
render() {
if (this.state.hasError) {
if (typeof this.props.fallback === "function") {
return this.props.fallback(this.state.error!, this.reset);
}
return this.props.fallback || <DefaultErrorFallback error={this.state.error!} reset={this.reset} />;
}
return this.props.children;
}
}
function DefaultErrorFallback({ error, reset }: { error: Error; reset: () => void }) {
return (
<div className="flex flex-col items-center justify-center p-8 text-center">
<h2 className="text-xl font-semibold text-red-600 mb-2">Something went wrong</h2>
<p className="text-gray-600 mb-4">{error.message}</p>
<button onClick={reset} className="px-4 py-2 bg-blue-500 text-white rounded">
Try again
</button>
</div>
);
}
```
## Custom Error Types
```typescript
// lib/errors.ts
export class AppError extends Error {
constructor(
message: string,
public code: string,
public status: number = 500,
public details?: Record<string, unknown>
) {
super(message);
this.name = "AppError";
}
}
export class ValidationError extends AppError {
constructor(message: string, public fields: Record<string, string[]>) {
super(message, "VALIDATION_ERROR", 400, { fields });
this.name = "ValidationError";
}
}
export class NotFoundError extends AppError {
constructor(resource: string, id?: string) {
super(id ? `${resource} with id ${id} not found` : `${resource} not found`, "NOT_FOUND", 404);
this.name = "NotFoundError";
}
}
```
## Best Practices
1. **Wrap critical components** with error boundaries
2. **Create specific error types** for different scenarios
3. **Log errors** to monitoring services
4. **Provide helpful error messages** to users
5. **Implement retry logic** where appropriate
6. **Handle async errors** in useEffect properly
7. **Test error scenarios** thoroughly
Google Antigravity helps implement robust error handling patterns throughout your application.This error-handling prompt is ideal for developers working on:
By using this prompt, you can save hours of manual coding and ensure best practices are followed from the start. It's particularly valuable for teams looking to maintain consistency across their error-handling implementations.
Yes! All prompts on Antigravity AI Directory are free to use for both personal and commercial projects. No attribution required, though it's always appreciated.
This prompt works excellently with Claude, ChatGPT, Cursor, GitHub Copilot, and other modern AI coding assistants. For best results, use models with large context windows.
You can modify the prompt by adding specific requirements, constraints, or preferences. For error-handling projects, consider mentioning your framework version, coding style, and any specific libraries you're using.