/** * Примеры использования новой системы обработки ошибок * Этот файл демонстрирует различные сценарии использования */ import { useState } from 'react'; import { useErrorHandler } from '../hooks/useErrorHandler'; import RetryButton from '../components/RetryButton'; import api from '../lib/api'; /** * Пример 1: Простая обработка ошибок в компоненте */ function SimpleErrorHandlingExample() { const [data, setData] = useState(null); const [loading, setLoading] = useState(false); const { handleError, handleSuccess, withErrorHandler } = useErrorHandler(); // Вариант 1: Ручная обработка ошибок const fetchDataManual = async () => { setLoading(true); try { const response = await api.get('/domains-new'); setData(response.data); handleSuccess('Данные успешно загружены'); } catch (error) { handleError(error, { component: 'SimpleErrorHandlingExample' }); } finally { setLoading(false); } }; // Вариант 2: Автоматическая обработка с withErrorHandler const fetchDataAuto = withErrorHandler( async () => { setLoading(true); const response = await api.get('/domains-new'); setData(response.data); setLoading(false); }, { successMessage: 'Данные успешно загружены', context: { component: 'SimpleErrorHandlingExample' } } ); return (

Пример простой обработки ошибок

{data && (

Загружено записей: {data.items?.length || 0}

)}
); } /** * Пример 2: Использование RetryButton */ function RetryButtonExample() { const [attempts, setAttempts] = useState(0); const { handleError: _handleError, handleSuccess } = useErrorHandler(); const unreliableOperation = async () => { setAttempts(prev => prev + 1); // Симуляция операции которая иногда падает if (Math.random() < 0.5) { throw new Error('Случайная ошибка для демонстрации'); } handleSuccess('Операция выполнена успешно!'); }; return (

Пример использования RetryButton

Попыток: {attempts}

Выполнить ненадежную операцию
); } /** * Пример 3: Обработка различных типов ошибок */ function ErrorTypesExample() { const { handleError } = useErrorHandler(); const triggerNetworkError = () => { api.get('/nonexistent-endpoint') .catch(error => handleError(error)); }; const triggerValidationError = () => { api.post('/domains-new', { invalid: 'data' }) .catch(error => handleError(error)); }; const triggerTimeoutError = () => { // Создаем запрос который точно превысит таймаут const slowApi = api.create({ timeout: 100 }); slowApi.get('/domains-new') .catch(error => handleError(error)); }; return (

Типы ошибок

); } /** * Главный компонент с примерами */ function ErrorHandlingExample() { return (

Примеры обработки ошибок

Демонстрация возможностей новой системы обработки ошибок

Особенности новой системы

  • Автоматический retry для GET запросов (до 3 попыток)
  • Умный retry для POST/PUT/DELETE при сетевых ошибках
  • Exponential backoff с jitter для избежания thundering herd
  • User-friendly сообщения вместо технических ошибок
  • Детальная информация для отладки (requestId, timestamp, детали)
  • Offline/Online detection с уведомлениями
  • Error Boundary для ловли React ошибок рендеринга
  • Типизация ошибок (Network, Timeout, Server, Client, etc.)
  • Интеграция с системой уведомлений
  • Логирование критичных ошибок
); } export default ErrorHandlingExample;