개발 일지/개발 일지

[개발 일지] Suspense를 이용하여 모든 api에 Loading 화면을 설정하자 (NextJS, Suspense)

2023. 2. 18. 22:19

Suspense란 무엇일까?

Suspense란, 아직 렌더링이 준비되지 않은 컴포넌트가 있을 때 로딩 화면을 보여주고 로딩이 완료되면 해당 컴포넌트를 보여주는 React에 내장되어 있는 기능입니다. SPA(Single-page-Application)의 단점은 한 번에 사용하지 않는 모든 컴포넌트까지 불러오기 때문에 첫 화면이 렌더링 될 때까지 시간이 오래걸리기는 것입니다. React는 lazy를 통해 컴포넌트를 동적으로 import하여 초기 렌더링 지연시간을 어느 정도 줄여줄 수 있습니다.

const SomeComponent = React.lazy(() => import('./SomeComponent'));

Router로 분기가 나누어진 컴포넌트들을 위 코드처럼 lazy를 통해 import하면 해당 path로 이동할때 컴포넌트를 불러오게 되는데 이 과정에서 로딩하는 시간이 생기게 됩니다.. 이 로딩되는 시간동안 로딩 화면을 보여지도록 해주는 역할을 하는 것이 바로 Suspense입니다.

 

저는 프로젝트에서 react의 <Suspense>와 React-query의 defaultOptions을 이용하여 Loading을 설정해주었습니다. 기존 코드는

const {isLoading,data} = useGetProfile();
...
if(isLoading) return <Loader />

위처럼 api를 사용하는 모든 페이지의 모든 api의 isLoading상태를 가져와 <Loader />를 return하도록 설정하였는데, 이러한 번거로움을 한 번에 제거해주었습니다.

PR : https://github.com/Att-ies/frontend/pull/282

 

리팩토링 : 디자인 수정 & 오류 수정 by gueit214 · Pull Request #282 · Att-ies/frontend

🧑‍💻 PR 내용 디자인 오류들을 수정하였습니다. home>post에서, 기존 useEffect를 이용하여 이미지를 변경하던 형식 > onChange형식으로 변경하였습니다. useEffect를 이용하여 이미지를 변경하면 이미

github.com

프로젝트에 도입 한 코드

매 번 설정해주었던 retry:0도 기본값으로 설정해주었습니다. retry를 다른 값으로 바꾸고 싶으면 각 query에서 설정해주면 됩니다.

마지막으로, 저희 프로젝트의 로딩화면 보여주고 마무리하겠습니다.


이런 유익한 기능이 있었다니.. 모든 기능 구현하는 방법을 처음부터 알 수는 없어도, 내가 사용하는 라이브러리에 '어떠한 기능'이 있는지는 알고 있어야 한다는 것을 알았다. 어떠한 라이브러리를 도입하기 전에, '어떠한 기능'이 있는지 싹 훑고, 정리하고 하도록 하자. 이 코드를 작성하며, 좋아할 팀원들을 상상하니 흐뭇했다.

저작자표시 (새창열림)

'개발 일지 > 개발 일지' 카테고리의 다른 글

[개발 일지] React성능 최적화 (2) : React Query의 캐싱 기능  (1) 2023.05.05
[개발 일지] React성능 최적화 (1) : React.memo로 사용자 경험 개선하기  (0) 2023.05.03
[개발 일지] Next.js에서 접근성 향상하기 (접근성 점수 84점 -> 97점 향상시킨 썰)  (0) 2023.04.27
[개발 일지] React Query - Custom Hook 만들기 (+Typescript)  (0) 2023.04.13
[개발 일지] JWT + 소셜 로그인을 정복해보자 (React + Spring Boot, Kakao Login, Naver Login)  (0) 2023.04.11
[개발 일지] Intersection Observer API & react-query를 이용한 무한스크롤 구현  (0) 2023.02.28
[개발 일지] Axios instance 설정 끝장내기 (Axios, instance, interceptors, JWT)  (0) 2023.02.11
[개발 일지] 채팅 기능을 구현해보자 (Websocket, Stomp, SockJS)  (0) 2023.02.10
'개발 일지/개발 일지' 카테고리의 다른 글
  • [개발 일지] JWT + 소셜 로그인을 정복해보자 (React + Spring Boot, Kakao Login, Naver Login)
  • [개발 일지] Intersection Observer API & react-query를 이용한 무한스크롤 구현
  • [개발 일지] Axios instance 설정 끝장내기 (Axios, instance, interceptors, JWT)
  • [개발 일지] 채팅 기능을 구현해보자 (Websocket, Stomp, SockJS)
피터s
피터s
1년차 프론트엔드 개발자입니다 😣 아직 열심히 배우는 중이에요! 리액트를 하고있어요 :) - gueit214@naver.com - https://github.com/gueit214
피터s
피터의 성장기록
피터s
전체
오늘
어제
  • 분류 전체보기 (200)
    • 코딩 테스트 (25)
      • 프로그래머스 (16)
      • LeetCode (8)
      • 백준 (1)
    • 개발 독서 일지 (1)
    • 기업 분석 (4)
    • 개발 일지 (19)
      • 최신기술 도전기 (1)
      • 에러 처리 (5)
      • 개발 일지 (12)
    • 개발 일상 (36)
      • 개발 회고 (22)
      • 개발 이야기 (12)
      • 개발 서적 (1)
    • 취업 관련 지식 (11)
    • 알고리즘 (17)
    • WebProgramming (84)
      • WebProgramming (8)
      • HTML (5)
      • CSS (8)
      • JS (21)
      • React (40)

블로그 메뉴

  • About
  • 2022년 개발 성장기
  • 앞으로의 계획
  • github
  • 일상 blog

공지사항

인기 글

태그

  • 1일 1커밋 후기
  • Kakao Tech Internship
  • 카카오
  • dfs
  • 반복문
  • lv3
  • 1년 회고
  • 해커톤
  • 개발 회고
  • 함수
  • 스터디 후기
  • Union-find
  • LV2
  • 구름
  • 구름톤
  • 개발 is life
  • Retry
  • 카카오 채용연계형 인턴십
  • KAKAO BLIND
  • 누적합
  • BFS
  • 개발 일상

최근 댓글

최근 글

hELLO · Designed By 정상우.
피터s
[개발 일지] Suspense를 이용하여 모든 api에 Loading 화면을 설정하자 (NextJS, Suspense)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.