[상황]
- 메인홈에서 페이지이동(레슨신청페이지)시 SSR방식일 경우 getServerProps가 완료되기전까지 화면이동없이 정지화면 처럼 보이는 현상 (아래 스크린샷 참고)
2. 사용자 경험상 클릭을해도 작동을 안한다고 생각해서 여러번 누르게되고, 중복 클릭으로 인한 오작동 가능성이 있음, 특히 뒤로가기 버튼클릭시 작동을 안한다고 생각하여 두번 누르게되어 이전페이지가 아닌 2번째전 history 페이지로 이동하게됨
[원인분석 및 해결방안]
1. Nextjs SSR 라우팅 특징으로 라우팅진행 되는동안 멈추어 보이는 현상이 있음
2. 페이지 이동과 이동 완료까지 중간에 로딩UI 가 필요
3. Nextjs 의 useRouter, Router 를 사용하여 처리
routeChangeStart(url, { shallow }) - 라우트가 변경되기 시작할때 트리거됨.
routeChangeComplete(url, { shallow }) - 라우트가 완전히 변경되었을 때 트리거됨.
routeChangeError(err, url, { shallow }) - 라우트 변경 중에 에러가 발생했거나, 취소되었을 때 트리거됨.
4. routeChangeStart 와 routeChangeComplete를 사용
Router.events.on("routeChangeStart", start);
Router.events.on("routeChangeComplete", end);
와 같은 형식으로 사용하여 _app.tsx 에서 event 등록, 페이지이동이 시작될때 start 함수실행, 이때 로딩 setState를 true 하고 페이지이동이 완료될때 end함수를 실행하게하고 이떄 로딩 setState 를 false를 하여 전역에서 아래와 같은 코드 추가
<Component {...pageProps} />
{isLoading &&<LoadingComponent />}
참고하기 좋은 사이트:
https://hanbbistory.tistory.com/87
'라이브러리&프레임워크 > Next.js' 카테고리의 다른 글
[Nextjs] 밀림현상 최적화 CLS(feat. dynamic import, Image component, getStaticProps, SSG revalidate) (0) | 2023.09.14 |
---|---|
[Nextjs] ErrorBoundary, Application error: a client-side exception has occurred (0) | 2023.07.11 |
[Nextjs] Tree Shaking 트리쉐이킹 번들 사이즈 최적화 (0) | 2022.12.22 |
[Next.js] Routing (1) | 2022.11.18 |
[Next.js] Layout, getLayout (0) | 2022.11.17 |