작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
38
·
수정됨
0
export default function Weekday() {
return (
<Suspense fallback={<WeekdayBannerLoading />}>
<WeekdayMiniBanner />
</Suspense>
);
}
export default function WeekdayMiniBanner() {
const { banners } = use(getBanners( params ));
if (banners.length === 0) return null;
return (
<div className={cn('wrapper')}>
<WeekdaySwiper data={banners} />
</div>
);
}
이런 식으로 코드를 짰는데요. 해당 페이지를 새로고침하면 초기엔 컨텐츠영역 아무것도 노출되지않다가 잠깐 fallback ui가 노출되고 fetch가 완료되면 컨텐츠를 노출시킵니다.
suspense는 promise가 pending 중일 때 promise를 catch해서 fallback ui 를 노출시키는걸로 알고 있는데 왜 새로고침 시 페이지 초기로드단계에선 빈화면이 노출되는지 궁금합니다...
아님 제가 잘못 설계한 걸까요..?? 리액트 공식문서 suspense 예시 코드에선 버튼 누르자마자 바로 fallback ui를 노출시키는데 말이죠...
참고로 WeekdaySwiper 내부는 react swiper로 구성되어있습니다! (클라이언트 컴포넌트)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 변재정님.
Suspense는 비동기적인 데이터 로딩을 간단히 처리할 수 있게 도와주는 리액트의 기능 중 하나입니다. 귀하의 코드에서 관찰된 현상은 Suspense를 사용할 때 종종 발생하는 문제입니다. 예상하신 대로, Suspense는 promise가 pending 상태일 때 fallback UI를 보여주도록 설계되어 있지만, 새로고침 시에 빈 화면이 잠깐 보이는 문제는 여러 가지 원인으로 발생할 수 있습니다.
JavaScript 배치 지연:
CSS 스타일 로드 딜레이:
서버측 Hydration 문제:
이 문제에 대한 구체적인 원인과 해결책은 아래 링크된 문서에서 약간 다른 경우일 수 있으나 도움이 될 수 있는 유사 답변들이 제공되고 있습니다:
혹시 Suspense의 기능이 정확히 작동하지 않는 듯한 느낌이 든다면, 위 사항들을 점검하고 코드가 의도대로 동작하는지 확인해보시는 것도 좋은 방법입니다. 빈 화면이 잠깐 보이는 것은 사용자의 경험에 악영향을 미칠 수 있으므로 최적화가 필요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.