반응형
1. 기본 아이디어
1.1 : 비동기로 데이터 호출 시, 데이터가 있으면 리턴하고, 없으면 promise를 throw한다.
function createResource(promise) {
let status = 'pending'
let result = promise.then(
resolved => {
status = 'success'
result = resolved
},
rejected => {
status = 'error'
result = rejected
},
)
return {
read() {
if (status === 'pending') throw result
if (status === 'error') throw result
if (status === 'success') return result
throw new Error('This should be impossible')
},
}
}
1.2 : 1.1의 훅을 사용하는 컴포넌트를 정의한다.
function PokemonInfo() {
const pokemon = pokemonResource.read()
return (
<div>
<div className="pokemon-info__img-wrapper">
<img src={pokemon.image} alt={pokemon.name} />
</div>
<PokemonDataView pokemon={pokemon} />
</div>
)
}
1.3 : 해당 컴포넌트를 Suspense로 감싼다.
- 서스펜스를 에러바운더리로 감싸주면 좋다.
- fallback은 로딩시 이미지를 보여준다.
- ErrorBounadary는 자바스크립트 런타임 에러, 비동기 에러 핸들링을 책임진다.
function App() {
return (
<div className="pokemon-info-app">
<div className="pokemon-info">
<PokemonErrorBoundary>
<React.Suspense fallback={<PokemonInfoFallback name="Pikachu" />}>
<PokemonInfo />
</React.Suspense>
</PokemonErrorBoundary>
</div>
</div>
)
}
참고 : Errorboundary
[Epic React] Errorboundary로 선언적 에러 핸들링 :: 개발자로 성장하기 (tistory.com)
반응형
'FrontEnd' 카테고리의 다른 글
Suspense와 리소스 캐싱하기 (0) | 2021.12.24 |
---|---|
Render as you fetch : 렌더링과 데이터 페칭을 동시에 (0) | 2021.12.24 |
[짤막글][Concurrent Mode] 비동기 모드 사용 방법 (0) | 2021.12.23 |
[WIP] 리액트 공식문서 읽기 : Thinking in React with Hooks (0) | 2021.12.23 |
React Suspense : 비동기 렌더링 내용은 아직 "미정" 상태에요 (0) | 2021.12.23 |