-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
## 목표 - 이번 색션에서는 React 18버전에서 새롭게 지원되는 기능들에 대해서 알아본다. - NextJS 에서도 이러한 React의 기능들을 지원한다. - 프레임워크만 다룰 줄 알고 라이브러리는 다룰 줄 모르면 안되기 때문에 둘 다 알아본다. - 이번 강의에서는 이미 안정되어 사용가능한 기능인 **Suspense** 에 대하여 알아본다. - 주의 : - 이 페이지는 **다소 오래되었으며** 역사적인 목적으로만 존재합니다. - React 18은 동시성을 지원하면서 출시되었습니다. 그러나 **더 이상 "모드"가 없으며** 새로운 동작은 완전히 선택되어 있으며 [새 기능을 사용할 때만](https://reactjs.org/blog/2022/03/29/react-v18.html#gradually-adopting-concurrent-features) 활성화됩니다 . - **Suspense** 기능을 실습해 보기 위해서 캐럿마켓 프로젝트의 `pages/profile/index.tsx` 파일에서 기존에 `getServerSideProps` 로 구현 되었던 부분을 주석처리 하고 유저 정보를 로딩 할 수 있는 환경을 만들어서 실습 하여 본다. ## **Suspense 란?** - 코드에서 로딩 상태를 나타내는 부분을 제거 할 수 있게 해주는 API - 코드에서 로딩 상태에 대해 신경쓰지 않아도 유저가 로딩 화면을 볼 수 있다. - **Suspense** 는 다음 것들과 함께 사용 할 수 없다. - `getServerSideProps` - `getStaticProps` - `getStaticPaths` → 위 기능들을 사용하면, 클라이언트 단에서 따로 로딩을 하지 않기 때문.. ## 정리 - **Suspense** 의 장점 중 하나는 - **Suspense** 로 감싼 컴포넌트에서 받아오는 API 데이터는 이미 로딩이 성공했다는 가정 하에 사용 할 수 있다. → 렌더링 코드 부분에서 API 데이터 유효성 확인 및 제외처리를 할 필요가 없다. - 페이지에서 SWR을 사용하면, **Suspense** 는 SWR 로딩이 끝날때까지 페이지 컴포넌트 전체를 표시하지 않는다. - 따라서 로딩 데이터 부분만 로딩 UI을 표시하고 싶다면, 해당 부분만을 컴포넌트로 추출하여 **Suspense** 로 감싸준다. - **Suspense** 를 활성화 시키는 방법은 라이브러리마다 다르다. - **Suspense** 는 개발자가 활성화 시킨다고 되는 것이 아니라, 라이브러리에서 해당 기능을 지원해줘야 하기 때문 - 예 : SWR와 React Query 의 **Suspense** 를 활성화 시키는 방법은 각각 다르다. ## 참고 ### Suspense [Suspense for Data Fetching (Experimental) – React](https://17.reactjs.org/docs/concurrent-mode-suspense.html) - Suspense를 사용하면 컴포넌트가 렌더링되기 전까지 기다릴 수 있습니다. - React 16.6 버전에서는 코드를 불러오는 동안 “기다릴 수 있고”, 기다리는 동안 로딩 상태를 지정할 수 있도록 `< Suspense >` 컴포넌트가 추가되었습니다. - Suspense는 단순히 데이터 로딩뿐만 아니라 이미지, 스크립트, 비동기 작업을 기다리는 데에도 사용될 수 있습니다. ```tsx // ProfilePage를 불러오는 동안 Loading를 표시합니다 <Suspense fallback={< Loading / >}> <ProfilePage /> </Suspense> ``` ### 완전 새로운 리액트가 온다? 핵심정리 10분컷. https://www.youtube.com/watch?v=7mkQi0TlJQo ### Error: Fallback data is required when using suspense in SSR > swr의 공식문서(https://swr.vercel.app/ko/docs/suspense)에 따르면, swr의 suspense모드는 next js에서 페이지를 서버사이드 렌더링(이 경우에는 pre-render)할 때 문제가 발생하는 것 같습니다. > - 해결법은 크게 두가지 - 하나는 swrconfig에 fallback 데이터를 미리 제공하는 것 → 하지만, 이 방법을 사용하면 suspense를 사용하는 의미가 없어집니다. 왜냐하면, suspense의 목적은 클라이언트단에서 실제 데이터를 받은 이후에만 렌더링하는 건데, fallback은 서버사이드에서 데이터를 패치하여 넣어줘야 하기 때문입니다. - (서버사이드에서 데이터를 받으면, 클라이언트사이드에서 데이터는 이미 존재하니 suspense의 필요성이 없어짐.) - 다른 방법은 next/dynamic을 사용해서 아래처럼 서버사이드 렌더링을 꺼주는 겁니다. - `export default dynamic(async () => Page, { ssr: false });` - 참고 문서 : vercel/swr#1906
- Loading branch information
1 parent
08ffedb
commit fc67afd
Showing
2 changed files
with
213 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters