티스토리 뷰
개발 코드 일부에 작은 에러가 나게되면 (warning으로 문구가 뜨고, 계속 진행이 되면 상관 없지만, 사실 이것도 문제) 다음 읽혀야 할 코드를 읽지 못해 전체 애플리케이션이 중단되는 경우가 있다. error boundary는 이러한 문제를 해결하기 위한 방법 중 하나이다.
error boundary란?
error boundary 컴포넌트로 감싸진 하위 컴포넌트 트리의 어디에서든지 js 에러를 기록하여 깨진 컴포넌트의 트리 대신에 fallback UI를 보여주는 react 컴포넌트이다. 이는 렌더링 도중 혹은 생명주기 메서드 등 전체 트리에서 에러를 캐치 할 수 있다.
error boundary가 에러를 포착할 수 없는 경우
- 이벤트 핸들러
- 비동기 코드 (setTimeout 등)
- SSR (서버사이드랜더링)
- 에러 경계 자체 발생 에러
error boundary 사용법
폴백UI를 랜더링 하기 위해서는 getDerivedStateFromError()함수를 에러 정보를 기록하기 위해서는 componentDidCatch()를 사용하면 된다.
다음 코드는 리액트 공식 홈페이지에서 보여주는 예시 코드이다.
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
static getDerivedStateFromError(error) {
// 다음 렌더링에서 폴백 UI가 보이도록 상태를 업데이트 합니다.
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
// 에러 리포팅 서비스에 에러를 기록할 수도 있습니다.
logErrorToMyService(error, errorInfo);
}
render() {
if (this.state.hasError) {
// 폴백 UI를 커스텀하여 렌더링할 수 있습니다.
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
아직 업데이트가 더 되어야
error boundary는 아직 함수형 컴포넌트에서는 지원하지 않는다. 하지만 서치 결과 (언젠가) 서비스 할 계획에 있다고 한다. 다만, class형을 거의 사용하지 않는 내 입장에서는 너무 아쉬운 소식이 아닐 수 없다.
참고 사이트
https://hyermione.tistory.com/77
리액트 코드 분할과 방법을 소개합니다 (dynamic, lazy 등)
빠름의 민족인 우리는 웹사이트가 조금만 느려도 매우 화를 내며 사이트를 이용하지 않는다.( = 는 나) 그래서 프론트앤드 개발자는 성능에 민감하게 반응하는 편이라 사이트가 무거운 것을 두
hyermione.tistory.com
https://ko.reactjs.org/docs/error-boundaries.html
에러 경계(Error Boundaries) – React
A JavaScript library for building user interfaces
ko.reactjs.org
'JavaScript > react' 카테고리의 다른 글
react에서 조건적으로 스타일을 제공하는 방법 (classNames) (0) | 2022.07.25 |
---|---|
useState와 useRef의 공통점과 차이점. (0) | 2022.07.19 |
리액트(react) 18 이모저모 참고링크 모음집 (0) | 2022.06.27 |
react(리액트)에서 hook은 왜 최상단에서 호출해야할까? (0) | 2022.06.24 |
React(리액트) clean-up 함수란? (메모리 누수 경고 해결 방법) (0) | 2022.06.23 |
- Total
- Today
- Yesterday
- js
- npm
- 깃
- BFCache
- 리액트상태관리
- storybookUI
- 프론트앤드
- 센트리모니터링
- 리액트
- 모바일사파리
- vue
- react
- gitRebase
- reacthook
- frontend
- 사파리
- Git
- 김민태
- 깃명령어
- CSS
- 리코일
- 프론트엔드
- 크롬
- TIL
- javascript
- 센트리
- 리액트훅
- js테스트
- sentry
- 자바스크립트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |