Error boundaries

Summer·2022년 12월 29일
0

리액트

목록 보기
7/7

미디엄을 보다가 반갑게도 리액트에 관한 글을 보게 됐다.

React Error Boundaries Explained

Error Boundaries

: Error Boundaries는 하위 컴포넌트 트리에서 자바스크립트 에러를 찾아 기록하고, 에러난 컴포넌트 대신에 fallbackUI를 보여주는 리액트 컴포넌트다.

왜 필요한걸까?

UI 일부에 존재하는 자바스크립트 에러 때문에 전체 어플리케이션이 중단되버리는 것을 막기 위해서다. 말하자면 사용자 경험을 위해서라는 건데.. 그 외에 앞으로의 동작에서 문제를 일으킬 여지도 있다고 한다.

왜 일부 에러 때문에 전체를 중단시켜버리지?

리액트 팀에서는 잘못된 정보를 사용자에게 보여주는 것보다 아무것도 보여주지 않는 것이 낫다고 판단했기 때문

사용 방법

  • ErrorBoundary 클래스 컴포넌트를 만들고, getDerivedStateFromError() 와 componentDidCatch() 를 정의한다. 전자는 에러가 났을 때 fullback UI를 렌더링하기 위한 메소드고, 후자는 에러 정보를 기록하기 위한 메소드다.
    (둘 중 하나만 정의해도 괜찮다.)
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, errorInfo) {
    // You can also log the error to an error reporting service
    logErrorToMyService(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // You can render any custom fallback UI
      return <h1>Something went wrong.</h1>;
    }

    return this.props.children; 
  }
}
  • 그리고 아래처럼 컴포넌트로 활용하면 된다.
  • MyWidget 컴포넌트에서 에러가 발생하면 hasError state는 true가 되고, 그러면 원래의 UI 대신에 "Something went wrong." 라는 글자가 화면에 나오게 되는 것이다.
  • 스택 추적도 해줘서 어느 부분에서 에러가 발생했는지도 알 수 있다.
  • 이쯤되면 try catch 구문이 생각나는데 둘의 다른 점은 try catch문은 명령형 코드에 이용되고 error boundaries는 선언형 코드에 사용된다는 것이다.
<ErrorBoundary>
  <MyWidget />
</ErrorBoundary>

리액트 공홈 문서

0개의 댓글