useQuery dependent Query
์ข ์(๋๋ ์์ฐจ์ ) ์ฟผ๋ฆฌ๋ ์ด์ ์ฟผ๋ฆฌ๊ฐ ์๋ฃ๋์ด์ผ๋ง ์คํ๋ ์ ์๋ ์ฟผ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ด๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋จํ๋ค.
// ์ฌ์ฉ์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
const { data: user } = useQuery({
queryKey: ['user', email],
queryFn: getUserByEmail,
})
const userId = user?.id
// ์ฌ์ฉ์์ ํ๋ก์ ํธ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
const {
status,
fetchStatus,
data: projects,
} = useQuery({
queryKey: ['projects', userId],
queryFn: getProjectsByUser,
// userId๊ฐ ์กด์ฌํ ๋๊น์ง ์ฟผ๋ฆฌ๋ ์คํ๋์ง ์๋๋ค.
enabled: !!userId,
})
projects ์ฟผ๋ฆฌ๋ ๋ค์ ์ํ๋ก ์์ํ๋ค.
status: 'pending'
idPending: true
fetchStatus: 'idle'
user ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง๋ ์ฆ์, projects ์ฟผ๋ฆฌ๋ enabled ์ํ๊ฐ ๋๋ฉฐ ๋ค์ ์ํ๋ก ์ ํ๋๋ค.
status: 'pending'
isPending: true
fetchStatus: 'fetching'
ํ๋ก์ ํธ ๋ฐ์ดํฐ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ฐ์ ธ์ค๋ฉด, ๋ค์ ์ํ๊ฐ ๋๋ค.
status: 'success'
isPending: false
fetchStatus: 'idle'
useQueries dependent Query
Dynamic parallel query - useQueries ์ญ์ ์ด์ ์ฟผ๋ฆฌ์ ์ข ์๋ ์ ์๋ค. ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
// ์ฌ์ฉ์ ID ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
const { data: userIds } = useQuery({
queryKey: ['users'],
queryFn: getUsersData,
select: (users) => users.map((user) => user.id),
})
// ๊ทธ ๋ค์ ์ฌ์ฉ์๋ค์ ๋ฉ์์ง ๊ฐ์ ธ์ค๊ธฐ
const usersMessages = useQueries({
queries: userIds
? userIds.map((id) => {
return {
queryKey: ['messages', id],
queryFn: () => getMessagesByUsers(id),
};
})
: [], // userIds๊ฐ undefined์ด๋ฉด ๋น ๋ฐฐ์ด์ ๋ฐํ
});
useQueries๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ฐฐ์ด์ ๋ฐํํ๋ค.
A note about performance
์ข
์ ์ฟผ๋ฆฌ๋ request waterfall ํํ๋ฅผ ๋ ๊ฒ ๋๋ฉฐ ์ด๋ ์ฑ๋ฅ์ ์ ํดํ๋ค. ๋ง์ฝ ๋ ์ฟผ๋ฆฌ๊ฐ ๋์ผํ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๊ณ ๊ฐ์ ํ ๋, ๋ณ๋ ฌ์ด ์๋ ์ง๋ ฌ(์์ฐจ์ )๋ก ์ฒ๋ฆฌํ๋ฉด ํญ์ 2๋ฐฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ ํนํ ํด๋ผ์ด์ธํธ์ ์ง์ฐ ์๊ฐ์ด ๋์ ํ๊ฒฝ์์ ์ฑ๋ฅ์ ์
์ํฅ์ ์ค๋ค.
๊ฐ๋ฅํ๋ค๋ฉด, ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๋ ฌ๋ก ๊ฐ์ ธ์ฌ ์ ์๋๋ก ๋ฐฑ์๋ API๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ด ํญ์ ๋ ์ข์ง๋ง, ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ์๋ ์๋ค.
์์ ์์์์ getProjectsByUser๋ฅผ ํธ์ถํ๊ธฐ ์ํด getUserByEmail์ ๋จผ์ ๊ฐ์ ธ์ค๋ ๋์ , getProjectsByUserEmail ๊ฐ์ ์๋ก์ด ์ฟผ๋ฆฌ๋ฅผ ๋์
ํ๋ค๋ฉด ์ด๋ฌํ ํญํฌ ํ์์ ํด์ํ ์ ์๋ค.
https://tanstack.com/query/latest/docs/framework/react/guides/dependent-queries
Dependent Queries | TanStack Query React Docs
useQuery dependent Query Dependent (or serial) queries depend on previous ones to finish before they can execute. To achieve this, it's as easy as using the enabled option to tell a query when it is r...
tanstack.com
'Frontend > TanStack Query' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Parallel Queries (0) | 2025.11.03 |
|---|---|
| Network Mode (0) | 2025.10.24 |
| Query Options (0) | 2025.10.23 |
| Query Functions (0) | 2025.10.22 |
| Query Keys (0) | 2025.10.21 |