@@ -103,7 +103,40 @@ export async function getDehydratedQuery<T>({ queryKey, queryFn }: { queryKey: Q
103103export const Hydrate = HydrationBoundary ;
104104```
105105
106- ### 4. ItemListContainer (Client Component)
106+ ### 4. ListPage (Server Component)
107+
108+ ``` typescript
109+ // app/list/page.tsx
110+
111+ import { Suspense } from ' react' ;
112+ import { SearchParams } from ' @/models/item' ;
113+ import queryOptions from ' @/services/item/queries' ;
114+ import { Hydrate , getDehydratedQuery } from ' @/utils/react-query/getDehydratedQuery' ;
115+ import ItemListContainer from ' ../../_components/itemList/container' ;
116+ import FilterBar from ' ../../_components/filter/container' ;
117+ import Loading from ' ./loading' ;
118+
119+ export default async function ListPage() {
120+ const initSearchData: SearchParams = {
121+ type: ' list' ,
122+ sortBy: ' default' ,
123+ };
124+
125+ const { queryKey, queryFn } = queryOptions .all (initSearchData );
126+ const dehydratedState = await getDehydratedQuery ({ queryKey , queryFn });
127+
128+ return (
129+ < Hydrate state = {dehydratedState }>
130+ < FilterBar type = {initSearchData.type } / >
131+ < Suspense fallback = {<Loading />}>
132+ < ItemListContainer initSearchData = {initSearchData } / >
133+ < / Suspense >
134+ < / Hydrate >
135+ );
136+ }
137+ ```
138+
139+ ### 5. ItemListContainer (Client Component)
107140
108141``` typescript
109142// app/_components/list/ItemListContainer.tsx
@@ -147,39 +180,6 @@ export default function ItemListContainer({ initSearchData }: { initSearchData:
147180}
148181```
149182
150- ### 5. ListPage (Server Component)
151-
152- ``` typescript
153- // app/list/page.tsx
154-
155- import { Suspense } from ' react' ;
156- import { SearchParams } from ' @/models/item' ;
157- import queryOptions from ' @/services/item/queries' ;
158- import { Hydrate , getDehydratedQuery } from ' @/utils/react-query/getDehydratedQuery' ;
159- import ItemListContainer from ' ../../_components/itemList/container' ;
160- import FilterBar from ' ../../_components/filter/container' ;
161- import Loading from ' ./loading' ;
162-
163- export default async function ListPage() {
164- const initSearchData: SearchParams = {
165- type: ' list' ,
166- sortBy: ' default' ,
167- };
168-
169- const { queryKey, queryFn } = queryOptions .all (initSearchData );
170- const dehydratedState = await getDehydratedQuery ({ queryKey , queryFn });
171-
172- return (
173- < Hydrate state = {dehydratedState }>
174- < FilterBar type = {initSearchData.type } / >
175- < Suspense fallback = {<Loading />}>
176- < ItemListContainer initSearchData = {initSearchData } / >
177- < / Suspense >
178- < / Hydrate >
179- );
180- }
181- ```
182-
183183### 6. Zustand 필터 스토어
184184
185185``` typescript
0 commit comments