-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[노철] - 페이지 서버컴포넌트 변경 #494
[노철] - 페이지 서버컴포넌트 변경 #494
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 너무 많으셨습니다 노철님!!
서버에서 prefetch -> dehydrate -> 클라에서 hydrate
야무지게 적용하셨네요 👍🏻
몇 가지 제 생각을 이야기해보자면,
1. 서버 컴포넌트 렌더링 시 로딩이 살짝 뜨는 현상
위 블로그 글 내용처럼, 저희가 MyPage에 접근을 하면, my/page.tsx
라는 서버 컴포넌트의 html 내용을 만들기 위해, 서버에서 await prefetching ~
도 하고, 이 data를 바탕으로 html
을 만드는 과정도 필요하니, 그 시간 동안 클라이언트에서는 로딩을 보여주는 것 같습니다.
그래서 그 html을 서버에서 만드는 동안 브라우저에서는 suspense가 로딩 스피너를 보여주고, 서버 컴포넌트가 렌더링된 후 하위 클라이언트 컴포넌트인 MyPageContent
도 렌더링을 시작하는 것 같아요. 이 때는 queryClient에 data가 있으니 useSuspenseQuery에서는 로딩을 던지지 않고 바로 data를 보여줄 수 있는 것 같아요.
근데 위 내용을 바탕으로 하면, 클라이언트 컴포넌트에서 useQuery를 써도 data는 존재한 상태에서 렌더링 되는거니 에러가 안떠야하는데,, 지금은 에러가 뜬다는거죠? ㅠ 좀 더 생각해봅시다,,,
2. 계획 수정 페이지 서버 컴포넌트 적용 여부
pr에서 말씀해주신대로, 계획 수정 페이지는 계획 상세 페이지를 통해 접근이 가능한 구조이고, 상세 페이지에 접근했을 때 이미 계획에 대한 data를 가져왔을 것입니다.
따라서 지금처럼 클라이언트 컴포넌트로 유지하면 data를 새로 불러오지 않고 캐싱 데이터를 사용할 수 있지만, 만약 서버 컴포넌트로 변경해서 prefetch한다면 서버에서 data를 불러오고 html을 만들줘야하기 때문에, data fetching이 사실상 한번 더 이루어져서 시간이 오히려 더 걸리지 않을까?? 라고 생각했습니다.
@@ -26,6 +24,7 @@ export default function LoginPage() { | |||
</div> | |||
<div className="login__poster"> | |||
<Image | |||
priority |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Image 태그에 priority 속성을 추가하심으로써 기본적으로 적용되는 lazy loading을 해제해주신 건가요??
@@ -1,5 +1,3 @@ | |||
'use client'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
login 페이지를 다시 보니 클라이언트 컴포넌트로 설정해줄 이유가 없었군요!! 그래서 빼주신거죠??
📌 이슈 번호
🚀 구현 내용
-현재 마이 페이지 서버 컴포넌트를 통한 prefetch 적용
📘 참고 사항
서버 컴포넌트에서 prefetch 설명 react-query 공식 문서
prefetch 설명 블로그
기존에 query 함수는 useSuspenseQuery를 썼는데 useQuery로 변경해야 합니다. ( 공식 문서에서는 useSuspenseQuery 대신 useQuery를 추천하고 있습니다. )❓ 궁금한 내용