React Suspense и Error Boundaries: Разширено управление на зареждане и грешки | MLOG | MLOG}> ); }; export default App;

В този пример:

Разбиране на Error Boundaries

Error Boundaries са React компоненти, които улавят JavaScript грешки навсякъде в дървото на техните дъщерни компоненти, регистрират тези грешки и показват резервен UI вместо да сриват цялото приложение. Те предоставят начин за грациозно справяне с неочаквани грешки, подобрявайки потребителското изживяване и правейки приложението ви по-устойчиво.

Ключови концепции на Error Boundaries

Основна имплементация на Error Boundaries

Ето един прост пример как да създадете Error Boundary:


import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // Актуализира състоянието, за да може следващото рендиране да покаже резервния UI.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Можете също да регистрирате грешката в услуга за докладване на грешки
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Можете да рендирате всеки персонализиран резервен UI
      return 

Something went wrong.

; } return this.props.children; } } export default ErrorBoundary;

В този пример:

Използване на Error Boundaries

За да използвате компонента `ErrorBoundary`, просто обвийте компонентите, които искате да защитите, с него:


import React from 'react';
import ErrorBoundary from './ErrorBoundary';

const MyComponent = () => {
  // Симулира грешка
  throw new Error('An error occurred!');
};

const App = () => {
  return (
    
      
    
  );
};

export default App;

В този пример, ако възникне грешка в `MyComponent`, компонентът `ErrorBoundary` ще улови грешката и ще покаже резервния UI.

Комбиниране на Suspense и Error Boundaries

Suspense и Error Boundaries могат да бъдат комбинирани, за да осигурят стабилна и цялостна стратегия за обработка на грешки при асинхронни операции. Като обвивате компоненти, които могат да бъдат спрени, както със Suspense, така и с Error Boundaries, можете грациозно да обработвате както състоянията на зареждане, така и неочакваните грешки.

Пример за комбиниране на Suspense и Error Boundaries


import React, { Suspense } from 'react';
import ErrorBoundary from './ErrorBoundary';

// Симулира извличане на данни (напр. от API)
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Симулира успешно извличане на данни
      // resolve({ name: 'John Doe', age: 30 });

      // Симулира грешка при извличане на данни
      reject(new Error('Failed to fetch user data'));

    }, 2000);
  });
};

// Създава ресурс, който Suspense може да използва
const createResource = (promise) => {
  let status = 'pending';
  let result;
  let suspender = promise().then(
    (r) => {
      status = 'success';
      result = r;
    },
    (e) => {
      status = 'error';
      result = e;
    }
  );

  return {
    read() {
      if (status === 'pending') {
        throw suspender;
      } else if (status === 'error') {
        throw result;
      }

      return result;
    },
  };
};

const userData = createResource(fetchData);

// Компонент, който чете от ресурса
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( Loading user data...}> ); }; export default App;

В този пример:

Напреднали техники и добри практики

Оптимизиране на производителността на Suspense

Персонализирани Error Boundaries

Можете да създадете персонализирани Error Boundaries, за да обработвате специфични типове грешки или да предоставяте по-информативни съобщения за грешки. Например, можете да създадете Error Boundary, която показва различен резервен UI в зависимост от типа на възникналата грешка.

Server-Side Rendering (SSR) със Suspense

Suspense може да се използва със Server-Side Rendering (SSR), за да подобри първоначалната производителност при зареждане на страницата. Когато използвате SSR, можете предварително да рендирате първоначалното състояние на вашето приложение на сървъра и след това да предавате останалото съдържание към клиента. Suspense ви позволява да обработвате асинхронно извличане на данни по време на SSR и да показвате индикатори за зареждане, докато данните се предават.

Обработка на различни сценарии за грешки

Разгледайте тези различни сценарии за грешки и как да се справите с тях:

Глобална обработка на грешки

Имплементирайте глобален механизъм за обработка на грешки, за да улавяте грешки, които не са уловени от Error Boundaries. Това може да се направи чрез използване на глобален обработчик на грешки или чрез обвиване на цялото приложение в Error Boundary.

Примери и случаи на употреба от реалния свят

Приложение за електронна търговия

В приложение за електронна търговия, Suspense може да се използва за показване на индикатори за зареждане при извличане на данни за продукти, а Error Boundaries могат да се използват за обработка на грешки, възникващи по време на процеса на плащане. Например, представете си потребител от Япония, който разглежда онлайн магазин, разположен в Съединените щати. Изображенията и описанията на продуктите може да отнемат известно време за зареждане. Suspense може да покаже проста анимация за зареждане, докато тези данни се извличат от сървър, вероятно намиращ се на другия край на света. Ако платежният шлюз се провали поради временен проблем с мрежата (често срещан при различни интернет инфраструктури в световен мащаб), Error Boundary може да покаже лесно разбираемо съобщение, подканващо ги да опитат отново по-късно.

Платформа за социални медии

В платформа за социални медии, Suspense може да се използва за показване на индикатори за зареждане при извличане на потребителски профили и публикации, а Error Boundaries могат да се използват за обработка на грешки, възникващи при зареждане на изображения или видеоклипове. Потребител, който разглежда от Индия, може да изпита по-бавни времена за зареждане на медии, хоствани на сървъри в Европа. Suspense може да покаже плейсхолдър, докато съдържанието не се зареди напълно. Ако данните на конкретен потребител са повредени (рядко, но възможно), Error Boundary може да предотврати срив на цялата емисия на социалните медии, показвайки просто съобщение за грешка като "Неуспешно зареждане на потребителски профил" вместо това.

Приложение за табло

В приложение за табло, Suspense може да се използва за показване на индикатори за зареждане при извличане на данни от множество източници, а Error Boundaries могат да се използват за обработка на грешки, възникващи при зареждане на диаграми или графики. Финансов анализатор в Лондон, който осъществява достъп до глобално инвестиционно табло, може да зарежда данни от множество борси по света. Suspense може да предостави индикатори за зареждане за всеки източник на данни. Ако API на една борса е неактивен, Error Boundary може да покаже съобщение за грешка, специфично за данните на тази борса, предотвратявайки неизползваемостта на цялото табло.

Заключение

React Suspense и Error Boundaries са основни инструменти за изграждане на устойчиви и удобни за потребителя React приложения. Използвайки Suspense за управление на състоянията на зареждане и Error Boundaries за обработка на неочаквани грешки, можете да подобрите цялостното потребителско изживяване и да опростите процеса на разработка. Това ръководство предостави цялостен преглед на Suspense и Error Boundaries, покривайки всичко от основни концепции до напреднали техники. Като следвате най-добрите практики, очертани в тази статия, можете да изградите стабилни и надеждни React приложения, които могат да се справят дори с най-трудните сценарии.

Тъй като React продължава да се развива, Suspense и Error Boundaries вероятно ще играят все по-важна роля в изграждането на модерни уеб приложения. Овладявайки тези функции, можете да останете на върха и да предоставите изключителни потребителски изживявания.