개발자

Suspense, useSuspenseQuery를 이용해서 skeleton ui를 구현하는데 초기 렌더링시 화면이 덜그럭거리는 문제가 있습니다.

2024년 10월 12일조회 1,588

200ms 동안은 이전 UI를 보여주고, 그 다음부터는 skeleton ui를 보여주고 싶습니다. 하지만, 현재상황은 이렇습니다. useSuspenseQuery를 이용했을때, 처음 200ms동안 데이터가 없어서 높이가 0이 되었다가 다시 높아지면서 화면이 덜그럭거리는 문제가 있습니다. 그래서 useTransition을 이용해서 이전 UI상태를 유지하도록 했지만 지연시간이 길어졌을때는 skeleton ui가 보이질 않습니다. 제가 궁금한건 다음과 같습니다. 1. 보통 useSuspensequery를 사용해 skeleton ui를 보여줄때 초기 렌더링시 이전 데이터가 보이지 않아서 화면이 깜빡이는 문제를 어떻게 해결하나요? 2. useTransition과 skeleton ui는 같이 사용할 수 없는 건가요? 대략적인 코드는 다음과 같습니다. 각각 최상위 부모인 Search 페이지, 데이터를 불러오고 카드리스트를 업데이트하는 CardList 컴포넌트, 스켈레톤 UI의 지연을 처리하는 DeferredComponent 입니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

인기 답변

김수빈님의 프로필 사진

1번 질문에 대해서 생각해 본 부분을 남겨볼게요. 초기 렌더링 시 데이터가 없어서 영역 높이가 0이라 화면이 깜빡인다고 말씀하시는 걸까요? 그렇다면 렌더링할 컴포넌트에 최소한의 height를 지정해 놓으면 덜 깜빡거리게 느껴지지 않을까요? 그러나 여전히 깜빡임은 있을 것 같습니다. 캐시 데이터가 없는데 아직 isLoading이 true가 되지 않아 fallback으로 넘긴 skeleton ui가 맨 처음에 보이지 않는 문제라면 query data가 없는 경우에도 skeleton ui를 보여주도록 예외처리를 추가해 볼 수 있을 것 같습니다. 2번 질문에 대해서는 이미 캐시 데이터가 있는 경우에는 스켈레톤 ui를 보여주기 보단 keepPreviousdata 속성을 이용해서 이전 데이터를 보여주다가 새 데이터 응답이 완료되면 레이아웃 변경 없이 변경된 데이터만 보여주는 게 더 좋은 사용성이 아닐까 싶은 생각이 들었습니다. 질문자님이 하신 고민의 시간과 노력에 비해 떠오르는 생각으로 답변을 달다 보니 원하시는 답이 아닐 수 있을 것 같아요~ 참고만 해주시면 좋을 것 같습니다 :) 파이팅!!

상현님의 프로필 사진

previousData는 새로 페칭된 데이터로 갈음되기 전까지 유효합니다. 시간 의존성이 응답 시간에 달려있습니다. DeferredComponent의 시간 의존성은 컴포넌트 내부에 정의해 둔 delay에 달려있습니다. 둘 사이에는 관계성이 없습니다. A가 끝나고 B가 시작되고 B가 끝나고 C가 시작되는 식의 waterfall은 전후 종속성이 있거나 같은 의존성을 가져야 제어할 수 있습니다. 1,2 모두 이 의존성을 관리하는 문제로 보이네요.

종현님의 프로필 사진

같은 고민으로 덜컥거리는 것을 방지하기 위해 FadeIn이라는 컴포넌트를 Suspensive에서 제공하고 있는데 이걸 사용해보시면 어때요? https://github.com/toss/suspensive/blob/9127cecfb48e17ef7c53dabf29c991d86fb176df/examples/visualization/src/app/react-dom/FadeIn/page.tsx#L42 그럼 결과물은 이렇게 나오게 되어요 https://visualization.suspensive.org/react-dom/FadeIn

profile picture

익명

작성자

2024년 12월 12일

오 토스에서 이런 라이브러리를 제공해주고 있었군요.. 감사합니다!!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!