Skip to content

Commit 7503c8b

Browse files
committed
fix: suspense 내용 수정
1 parent fbbe434 commit 7503c8b

1 file changed

Lines changed: 29 additions & 8 deletions

File tree

README.md

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,6 +1304,8 @@ import { Suspense } from "react";
13041304
const queryClient = new QueryClient({
13051305
defaultOptions: {
13061306
queries: {
1307+
// suspense: true, - 💡 v5부터 Deprecated
1308+
// useQuery/useInfiniteQuery 와 같은 일반 훅 대신 useSuspenseQuery/useSuspenseInfiniteQuery와 같은 suspense 훅 사용
13071309
throwOnError: true,
13081310
},
13091311
},
@@ -1320,16 +1322,15 @@ function App() {
13201322

13211323
- 코드를 보면 우리는 서버 상태가 로딩일 때 Loader 컴포넌트를 보여주겠다!라고 이해할 수 있다.
13221324
- Suspense컴포넌트 내부에서 어떤 로직이 동작하는지 우리는 신경쓰지 않아도된다. 이처럼 `내부 복잡성을 추상화`하는게 바로 `선언형 컴포넌트`이다.
1323-
- 또한, 위와 같이 react-query와 결합한 Suspense는 아래와 같은 과정으로 동작을한다. 참고해보자.
1325+
- 위와 같이 `react-query(useSuspenseQuery)` 결합한 `Suspense` 아래와 같은 과정으로 동작을한다.
13241326

13251327
```
13261328
1. Suspense mount
13271329
2. MainComponent mount
1328-
3. MainComponent에서 useQuery에 있는 api Call
1330+
3. MainComponent에서 useSuspenseQuery 훅을 사용하여 비동기 데이터 요청
13291331
4. MainComponent unmount, fallback UI인 Loader mount
1330-
5. api Call Success일 경우, useQuery에 있는 onSuccess 동작
1331-
6. onSuccess 완료 이후 Loader unmount
1332-
7. MainComponent mount
1332+
5. 비동기 데이터 요청이 완료되면 fallback UI인 Loader unmount
1333+
6. MainComponent mount
13331334
```
13341335

13351336
<br />
@@ -1339,12 +1340,32 @@ function App() {
13391340
- [new hooks for suspense](https://github.com/ssi02014/react-query-tutorial/blob/main/document/v5.md#21-%EF%B8%8F-new-hooks-for-suspense)
13401341
- v5에서는 `data fetching`에 대한 `suspense`가 마침내 안정화되었습니다.
13411342
- `useSuspenseQuery`, `useSuspenseInfiniteQuery`, `useSuspenseQueries` 3가지 훅이 추가되었습니다.
1343+
- 기존의 `suspense 옵션`은 제거되었습니다. 따라서 Suspense를 적용하려면 위 훅들을 활용해야 합니다.
13421344
- 위 3가지 훅을 사용하게 되면 타입 레벨에서 `data``undefined` 상태가 되지 않습니다.
13431345

13441346
```tsx
1345-
import { useSuspenseQuery } from "@tanstack/react-query";
1347+
import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
13461348

1347-
const { data } = useSuspenseQuery({ queryKey, queryFn });
1349+
const fetchGroups = async (): Promise<{ data: Group[] }> => {
1350+
const res = await axios.get("/groups");
1351+
return res;
1352+
};
1353+
1354+
// as-is
1355+
// data: Group[] | undefined
1356+
const { data } = useQuery({
1357+
queryKey: ["groups"],
1358+
queryFn: fetchGroups,
1359+
select: (data) => data.data,
1360+
});
1361+
1362+
// to-be
1363+
// data: Group[]
1364+
const { data } = useSuspenseQuery({
1365+
queryKey: ["groups"],
1366+
queryFn: fetchGroups,
1367+
select: (data) => data.data,
1368+
});
13481369
```
13491370

13501371
<br />
@@ -1353,7 +1374,7 @@ const { data } = useSuspenseQuery({ queryKey, queryFn });
13531374

13541375
- TanStack Query(React) 공식문서의 `Community Resources`에서는 Suspense를 더 `타입 세이프`하게 잘 사용하기 위해 [useSuspenseQuery](https://suspensive.org/ko/docs/react-query/useSuspenseQuery), [useSuspenseQueries](https://suspensive.org/ko/docs/react-query/useSuspenseQueries), [useSuspenseInfiniteQuery](https://suspensive.org/ko/docs/react-query/useSuspenseInfiniteQuery)를 제공하는 [@suspensive/react-query](https://tanstack.com/query/v4/docs/react/community/suspensive-react-query)를 소개하고 있다.
13551376

1356-
- suspensive/react-query의 훅(useSuspenseQuery, useSuspenseQueries, useSuspenseInfiniteQuery)은 @tanstack/react-query v5 alpha버전에 추가([관련 Pull Request](https://github.com/TanStack/query/pull/5739))되고 공식 API로 [이 페이지](https://tanstack.com/query/v5/docs/react/guides/suspense)에서 확인할 수 있습니다.
1377+
- suspensive/react-query의 훅(useSuspenseQuery, useSuspenseQueries, useSuspenseInfiniteQuery)은 @tanstack/react-query v5 버전에 추가([관련 Pull Request](https://github.com/TanStack/query/pull/5739))되고 공식 API로 [이 페이지](https://tanstack.com/query/v5/docs/react/guides/suspense)에서 확인할 수 있습니다.
13571378

13581379
<br />
13591380

0 commit comments

Comments
 (0)