|
50 | 50 | 26. [์ฌ์ฉ์ ๊ฒฝํ(UX)์ ์ฌ๋ ค์ฃผ๋ Optimistic Updates(๋๊ด์ ์
๋ฐ์ดํธ)](#optimistic-update) |
51 | 51 | 27. [์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ Fallback UI๋ฅผ ์ ์ธ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ErrorBoundary + useQueryErrorResetBoundary](#usequeryerrorresetboundary) |
52 | 52 | 28. [์๋ฒ ๋ก๋ฉ์ค์ผ ๋ Fallback UI๋ฅผ ์ ์ธ์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํ Suspense](#suspense) |
53 | | -29. [๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ ํ์
์คํฌ๋ฆฝํธ ์ ์ฉ](#react-query-typescript) |
| 53 | +29. [์ฑ ์ ์ฒด์ ๋์ผํ ์ฟผ๋ฆฌ ํจ์๋ฅผ ๊ณต์ ํ๋ Default Query Function](#default-query-function) |
| 54 | +30. [๋ฆฌ์กํธ ์ฟผ๋ฆฌ์ ํ์
์คํฌ๋ฆฝํธ ์ ์ฉ](#react-query-typescript) |
54 | 55 |
|
55 | 56 | <br /> |
56 | 57 |
|
@@ -1135,7 +1136,7 @@ const useAddSuperHeroData = () => { |
1135 | 1136 |
|
1136 | 1137 | [๋ชฉ์ฐจ ์ด๋](#์ฃผ์-์ปจ์
-๋ฐ-๊ฐ์ด๋-๋ชฉ์ฐจ) |
1137 | 1138 |
|
1138 | | -- [useQueryErrorResetBoundary v4](hhttps://tanstack.com/query/v4/docs/react/reference/useQueryErrorResetBoundary) |
| 1139 | +- [useQueryErrorResetBoundary v4](https://tanstack.com/query/v4/docs/react/reference/useQueryErrorResetBoundary) |
1139 | 1140 | - react-query์์ ErrorBoundary์ useQueryErrorResetBoundary๋ฅผ ๊ฒฐํฉํด `์ ์ธ์ `์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋ Fallback UI๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค. |
1140 | 1141 | - ErrorBoundary์ ๋ํ ์ค๋ช
์ ํด๋น ๋ฌธ์ ์ฐธ๊ณ [ErrorBoundary](https://github.com/ssi02014/react-query-tutorial/blob/master/document/errorBoundary.md) |
1141 | 1142 |
|
@@ -1252,6 +1253,57 @@ function App() { |
1252 | 1253 |
|
1253 | 1254 | <br /> |
1254 | 1255 |
|
| 1256 | +## Default Query Function |
| 1257 | +
|
| 1258 | +[๋ชฉ์ฐจ ์ด๋](#์ฃผ์-์ปจ์
-๋ฐ-๊ฐ์ด๋-๋ชฉ์ฐจ) |
| 1259 | +
|
| 1260 | +- ์ฑ ์ ์ฒด์์ ๋์ผํ ์ฟผ๋ฆฌ ํจ์๋ฅผ ๊ณต์ ํ๊ณ , `queryKey`๋ฅผ ์ฌ์ฉํด ๊ฐ์ ธ์์ผ ํ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๊ณ ์ถ๋ค๋ฉด `QueryClient`์ `queryFn` ์ต์
์ ํตํด Default Query Function์ ์ง์ ํด ์ค ์ ์๋ค. |
| 1261 | +- [Default Query Function v4](https://tanstack.com/query/v4/docs/react/guides/default-query-function) |
| 1262 | +
|
| 1263 | +```jsx |
| 1264 | +// ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ํจ์ |
| 1265 | +const getSuperHero = async ({ queryKey }: any) => { |
| 1266 | + const heroId = queryKey[1]; |
| 1267 | + return await axios.get(`http://localhost:4000/superheroes/${heroId}`); |
| 1268 | +}; |
| 1269 | + |
| 1270 | +const queryClient = new QueryClient({ |
| 1271 | + defaultOptions: { |
| 1272 | + queries: { |
| 1273 | + queryFn: getSuperHero, |
| 1274 | + // ...queries options |
| 1275 | + }, |
| 1276 | + }, |
| 1277 | +}); |
| 1278 | + |
| 1279 | +function App() { |
| 1280 | + return ( |
| 1281 | + <QueryClientProvider client={queryClient}>{/* ... */}</QueryClientProvider> |
| 1282 | + ); |
| 1283 | +} |
| 1284 | +``` |
| 1285 | +
|
| 1286 | +- `QueryClient`์ ์ฑ ์ ์ฒด์์ ์ฌ์ฉํ ์ฟผ๋ฆฌ ํจ์๋ฅผ ์ง์ ํด ์ค๋ค. |
| 1287 | +
|
| 1288 | +```jsx |
| 1289 | +// ์ฌ์ฉ ์์ |
| 1290 | +const useSuperHeroData = (heroId: string) => { |
| 1291 | + return useQuery(["superheroes", heroId]); |
| 1292 | +}; |
| 1293 | +``` |
| 1294 | +
|
| 1295 | +```jsx |
| 1296 | +// ๋ค์ ํํ ๋ถ๊ฐ๋ฅ |
| 1297 | +const useSuperHeroData = (heroId: string) => { |
| 1298 | + return useQuery(["superheroes", heroId], () => getSuperHero(heroId)); |
| 1299 | +}; |
| 1300 | +``` |
| 1301 | +
|
| 1302 | +- useQuery์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก `queryKey`๋ง ๋ฃ์ด์ฃผ๋ฉด ๋ ๋ฒ์งธ ์ธ์์ ๋ค์ด๊ฐ `queryFn`์ ์๋์ผ๋ก ์ค์ ๋ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ ํจ์๊ฐ ๋ค์ด๊ฐ๋ค. |
| 1303 | +- ์ผ๋ฐ์ ์ผ๋ก `useQuery`๋ฅผ ์ฌ์ฉํ ๋์ ๋ฌ๋ฆฌ `queryFn`์ ์ง์ ํ์ง ์๊ธฐ์ ์ฟผ๋ฆฌ ํจ์์ ์ง์ ์ธ์๋ฅผ ๋ฃ์ด์ฃผ๋ ํํ์ ์ฌ์ฉ์ ๋ถ๊ฐ๋ฅํ๋ค. |
| 1304 | +
|
| 1305 | +<br /> |
| 1306 | +
|
1255 | 1307 | ## React Query Typescript |
1256 | 1308 |
|
1257 | 1309 | [๋ชฉ์ฐจ ์ด๋](#์ฃผ์-์ปจ์
-๋ฐ-๊ฐ์ด๋-๋ชฉ์ฐจ) |
|
0 commit comments