Skip to content

Commit

Permalink
feat: app directory에서 ReactQuery 사용시 pre-fetch로 데이터를 전달하기 위한 코드 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
Leejha committed Aug 5, 2023
1 parent d9b65a0 commit b0c5498
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
17 changes: 17 additions & 0 deletions apps/web/app/my/edit/components/HydratedUserInfo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { dehydrate } from "@tanstack/react-query";
import ProfileEditPage from "app/my/edit/components/Temp";
import { getUserInfo } from "lib/apis/user";
import getQueryClient from "lib/getQueryClient";
import HydrateOnClient from "lib/hydrateOnClient";
import { reactQueryKeys } from "lib/queryKeys";

export default async function HydratedUserInfo() {
const queryClient = getQueryClient();
await queryClient.prefetchQuery(reactQueryKeys.userInfo(), getUserInfo);
const dehydratedState = dehydrate(queryClient);
return (
<HydrateOnClient state={dehydratedState}>
<ProfileEditPage />
</HydrateOnClient>
);
}
7 changes: 7 additions & 0 deletions apps/web/lib/getQueryClient.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { QueryClient } from "@tanstack/react-query";
import { cache } from "react";

// `QueryClient` 의 요청 범위 싱글톤 인스턴스를 만든다.
// 이렇게 하면 서로 다른 사용자와 요청 간에 데이터가 공유되지 않고 여전히 요청당 한 번만 QueryClient를 생성한다.
const getQueryClient = cache(() => new QueryClient());
export default getQueryClient;
4 changes: 4 additions & 0 deletions apps/web/lib/hydrateOnClient.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
"use client";

import { Hydrate as HydrateOnClient } from "@tanstack/react-query";
export default HydrateOnClient;

0 comments on commit b0c5498

Please sign in to comment.