>  기사  >  웹 프론트엔드  >  React의 오류 경계 마스터하기: 효과적인 오류 처리 가이드

React의 오류 경계 마스터하기: 효과적인 오류 처리 가이드

WBOY
WBOY원래의
2024-07-20 00:55:30683검색

Mastering Error Boundaries in React: A Guide to Effective Error Handling

오류 경계란 무엇입니까?

애플리케이션을 구축하는 동안 오류는 불가피합니다. API, UI 또는 기타 여러 위치에서 올 수 있습니다.

이러한 오류를 적절하게 처리하고 이러한 오류에도 불구하고 좋은 UX를 유지하는 것이 매우 중요합니다.

Error Boundary는 React의 오류 처리 방법 중 하나입니다.


오류 경계는 어떻게 도움이 되나요?

이를 이해하기 위해 오류 경계 도입 전의 상황을 이해해 보겠습니다.

Error Boundaries 이전에는 구성 요소 내부에서 발생하는 오류가 결국 전파되어 UI가 깨지거나 흰색 화면이 렌더링되었습니다.

이로 인해 정말 나쁜 UX가 발생했습니다.

Error Boundary는 이러한 오류를 처리하고 UI가 깨지거나 흰색 화면이 표시되는 대신 대체 UI를 표시하는 데 도움이 됩니다.


오류 경계를 사용하는 방법은 무엇입니까?

React v16에서는 Error Boundary가 공식적으로 도입되었습니다.

애플리케이션을 래핑하는 데 사용할 수 있는 클래스 기반 구성 요소입니다.

애플리케이션에 오류가 있는 경우에 표시할 대체 UI를 허용하며, 단순히 하위 구성요소를 렌더링하여 애플리케이션의 정상적인 흐름을 재개합니다.

React 문서에서 권장하는 방법은 다음과 같습니다.

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

  static getDerivedStateFromError(error) {
    // Update state so the next render will show the fallback UI.
    return { hasError: true };
  }

  componentDidCatch(error, info) {
    // Example "componentStack":
    //   in ComponentThatThrows (created by App)
    //   in ErrorBoundary (created by App)
    //   in div (created by App)
    //   in App
    logErrorToMyService(error, info.componentStack);
  }

  render() {
    if (this.state.hasError) {
      // You can render any custom fallback UI
      return this.props.fallback;
    }

    return this.props.children;
  }
}


React의 Error Boundary에 어떤 문제가 있나요?

에서 발생하는 오류는 잡을 수 없습니다.

  • 이벤트 핸들러(이러한 오류는 try-catch 블록으로 처리해야 함)
  • 비동기 코드(API, setTimeout, requestAnimationFrame 등)
  • 서버측 렌더링
  • Error Boundary 자체에서 발생하는 오류
  • 기능 구성 요소에서는 작동하지 않습니다. 몇 가지 코드를 변경하면 작동하게 할 수 있습니다.
  • 내부에는 후크를 사용할 수 없습니다.

해결책은 무엇입니까?

기존 Error Boundary 구성 요소 위에 래퍼인 반응 오류 경계라는 npm 패키지가 있습니다.

이 패키지를 사용하면 기존 오류 경계 구성 요소가 직면한 모든 문제를 극복할 수 있습니다.


그것을 사용하는 방법?

전체 애플리케이션을 .

로 래핑하거나 개별 구성요소를 래핑할 수 있습니다.

구현 세부사항은 귀하에게 달려 있습니다.


사용방법을 알아보겠습니다.

import React from 'react';
import { ErrorBoundary } from "react-error-boundary";

const App = () => {
return <ErrorBoundary fallback={<div>Something went wrong</div>}>
/* rest of your component */
</ErrorBoundary>
}

ErrorBoundary를 사용하는 가장 간단한 예입니다. 이 라이브러리에는 더 많은 내용이 있습니다.

반응 오류 경계 API 이해

다양한 시나리오로 API를 이해해 보겠습니다.

1. 애플리케이션 오류에 대한 일반적인 대체 UI를 표시하고 싶습니다

 import React from 'react';
 import { ErrorBoundary } from "react-error-boundary";

 const App = () => {
 return <ErrorBoundary fallback={<div>Something went wrong</div>}>
 /* rest of your component */
 </ErrorBoundary>
 }

2. 대체 구성 요소에 구체적인 오류 세부 정보를 표시하고 싶습니다

 import React from 'react';
 import { ErrorBoundary } from "react-error-boundary";

 function fallbackRender({ error, resetErrorBoundary }) {
   // Call resetErrorBoundary() to reset the error boundary and retry the render.
   return (
     <div role="alert">
       <p>Something went wrong:</p>
       <pre style={{ color: "red" }}>{error.message}
); } const App = () => { return { // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }


fallback이나 fallbackRender 대신 React Component를 사용할 수도 있습니다.

 import React from 'react';
 import { ErrorBoundary } from "react-error-boundary";

 const Fallback = ({ error, resetErrorBoundary }) => {
   // Call resetErrorBoundary() to reset the error boundary and retry the render.
   return (
     <div role="alert">
       <p>Something went wrong:</p>
       <pre style={{ color: "red" }}>{error.message}
); } const App = () => { return { // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }

3. 내 오류를 기록하고 싶습니다

 import React from 'react';
 import { ErrorBoundary } from "react-error-boundary";

 const logError = (error: Error, info: { componentStack: string }) => {
   // Do something with the error, e.g. log to an external API
 };

 const Fallback = ({ error, resetErrorBoundary }) => {
   // Call resetErrorBoundary() to reset the error boundary and retry the render.
   return (
     <div role="alert">
       <p>Something went wrong:</p>
       <pre style={{ color: "red" }}>{error.message}
); } // You can use fallback / fallbackRender / FallbackComponent anything const App = () => { return { // Reset the state of your app so the error doesn't happen again }} > /* rest of your component */ }

4. 이벤트 핸들러와 비동기 코드의 오류를 잡아내고 싶습니다

 import { useErrorBoundary } from "react-error-boundary";

 function Example() {
   const { showBoundary } = useErrorBoundary();
   const getGreeting = async(name) => {
     try {
         const response = await fetchGreeting(name);
         // rest of your code
     } catch(error){
          // Show error boundary
         showBoundary(error);
     }
   }
   useEffect(() => {
    getGreeting()
   });

   return <Whatever UI you want to render/>
 }


몇 가지 문제

ErrorBoundary는 클라이언트 구성 요소입니다. 직렬화 가능한 props만 전달하거나 "클라이언트 사용"이 있는 파일에서만 사용할 수 있습니다. 지시문.

1. 직렬화 가능 prop이란 무엇인가요?

Serilzable prop은 바이트 스트림을 원래 prop으로 다시 변환할 수 있는 방식으로 바이트 스트림으로 변환할 수 있음을 의미합니다.

Javascript에서 이를 수행하는 일반적인 방법은 JSON.stringify() 및 JSON.parse()입니다.

2. "클라이언트 사용"을 사용하는 방법; 지시문?


파일 상단에 언급해주시면 됩니다

"use client";


사용할 수 있는 몇 가지 변형이 더 있습니다. 하지만 이 기사는 시작하기에 충분합니다.

여기에서 전체 문서를 확인하세요.

도움이 되셨다면 댓글로 알려주세요.

즐거운 코딩하세요!

위 내용은 React의 오류 경계 마스터하기: 효과적인 오류 처리 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript json npm if for while try catch Error using class Event Generic this display ux ui
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Flutter와 React Native 비교다음 기사:Flutter와 React Native 비교

관련 기사

더보기