Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Ошибки в React

Все темы React Developer

Как обрабатывать ошибки в React-приложении с помощью Error Boundary?

Error Boundary — это компонент, который отлавливает ошибки в дочерних компонентах и предотвращает их распространение на всю иерархию.

Основные шаги:

  1. Создание Error Boundary:

    • Создайте классовый компонент с методами componentDidCatch и getDerivedStateFromError.
    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 caught by ErrorBoundary:", error, errorInfo);
      }
    
      render() {
        if (this.state.hasError) {
          // Рендер запасного UI при ошибке
          return <h1>Something went wrong.</h1>;
        }
    
        return this.props.children;
      }
    }
    
    export default ErrorBoundary;
  2. Использование Error Boundary:

    • Оберните компоненты, которые могут вызвать ошибки, в Error Boundary.
    import React from 'react';
    import ErrorBoundary from './ErrorBoundary';
    import MyComponent from './MyComponent';
    
    const App = () => (
      <ErrorBoundary>
        <MyComponent />
      </ErrorBoundary>
    );
    
    export default App;

Error Boundary позволяет обрабатывать ошибки в React-приложении, предотвращая их распространение и предоставляя возможность отображения запасного UI, обеспечивая более стабильное приложение.


Как обрабатывать ошибки при использовании хуков (hooks) в React?

Для обработки ошибок при использовании хуков в React можно использовать блоки try...catch внутри эффектов или пользовательских хуков.

Основные способы:

  1. Обработка ошибок в useEffect:

    • Используйте блок try...catch внутри эффекта.
    import React, { useEffect, useState } from 'react';
    
    const MyComponent = () => {
      const [data, setData] = useState(null);
      const [error, setError] = useState(null);
    
      useEffect(() => {
        const fetchData = async () => {
          try {
            const response = await fetch('https://api.example.com/data');
            const result = await response.json();
            setData(result);
          } catch (err) {
            setError(err);
          }
        };
    
        fetchData();
      }, []);
    
      if (error) {
        return <div>Error: {error.message}</div>;
      }
    
      return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
    };
    
    export default MyComponent;
  2. Обработка ошибок в пользовательских хуках:

    • Создайте пользовательский хук, который включает обработку ошибок.
    import { useState, useEffect } from 'react';
    
    const useFetch = (url) => {
      const [data, setData] = useState(null);
      const [error, setError] = useState(null);
    
      useEffect(() => {
        const fetchData = async () => {
          try {
            const response = await fetch(url);
            const result = await response.json();
            setData(result);
          } catch (err) {
            setError(err);
          }
        };
    
        fetchData();
      }, [url]);
    
      return { data, error };
    };
    
    export default useFetch;
  3. Использование Error Boundary:

    • Error Boundary перехватывает ошибки рендера дочерних компонентов. Ошибки обработчиков событий и отклонения обычных асинхронных запросов обрабатывайте отдельно через try/catch или catch; само наличие хуков не делает их защищёнными.
    import React from 'react';
    import ErrorBoundary from './ErrorBoundary';
    import MyComponent from './MyComponent';
    
    const App = () => (
      <ErrorBoundary>
        <MyComponent />
      </ErrorBoundary>
    );
    
    export default App;

Для обработки ошибок при использовании хуков в React применяйте блоки try...catch внутри эффектов и пользовательских хуков, а также используйте Error Boundary для защиты компонентов от неожиданных ошибок.

Эта страница была полезной?