애플리케이션을 구축하는 동안 오류는 불가피합니다. 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; } }
에서 발생하는 오류는 잡을 수 없습니다.
기존 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를 이해해 보겠습니다.
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}
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}
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}
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!