Skip to content

Commit 96428ae

Browse files
2026.02.09 컴포넌트 순서 변경
1 parent ca9b4db commit 96428ae

1 file changed

Lines changed: 34 additions & 34 deletions

File tree

dev-log/next-tanstack-query-ssr-hydration.md

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,40 @@ export async function getDehydratedQuery<T>({ queryKey, queryFn }: { queryKey: Q
103103
export 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

Comments
 (0)