Query Keys
๋ณธ์ง์ ์ผ๋ก, TanStack Query๋ query keys๋ฅผ ๊ธฐ๋ฐ์ผ๋ก query ์บ์ฑ์ ๊ด๋ฆฌํ๋ค. query keys๋ top level์ ๋ฐฐ์ด์ด์ด์ผ ํ๋ฉฐ, ๋จ์ผ ๋ฌธ์์ด์ด ํฌํจ๋ ๋ฐฐ์ด์ฒ๋ผ ๋จ์ํ๊ฑฐ๋ ๋ง์ ๋ฌธ์์ด ๋ฐ ์ค์ฒฉ ๊ฐ์ฒด ๋ฐฐ์ด์ฒ๋ผ ๋ณต์กํ ์ ์๋ค. query keys๊ฐ ์ง๋ ฌํ ๊ฐ๋ฅํ๊ณ , query keys์ ๋ฐ์ดํฐ๊ฐ ์ ๋ํฌ ํ ์ด์, ๋๋ ์ฌ์ฉํ ์ ์๋ค!
1. ๊ฐ๋จํ Query Keys
key์ ๊ฐ์ฅ ๊ฐ๋จํ ํํ๋ ์์๊ฐ์ด ํฌํจ๋ ๋ฐฐ์ด์ด๋ค. ์ด ํ์์ ์ ์ฉํ๋ค. ๋ค์์ ๊ฒฝ์ฐ:
- ์ผ๋ฐ ๋ชฉ๋ก/์ธ๋ฑ์ค ๋ฆฌ์์ค
- Non-hierarchical resources (๊ณ์ธต์ ์ด์ง ์์ ๋ฆฌ์์ค)
1// A list of todos2useQuery({ queryKey: ['todos'], ... })34// Something else, whatever!5useQuery({ queryKey: ['something', 'special'], ... })
2. ๋ณ์๊ฐ ์๋ ๋ฐฐ์ด Keys
query์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ํฌํ๊ฒ ์ค๋ช ํ๊ธฐ ์ํด ์ถ๊ฐ ์ ๋ณด๊ฐ ํ์ํ ๋, ๋ฌธ์์ด์ด ์๋ ์ง๋ ฌํ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์ํ๋ ์๋งํผ ์ฌ์ฉํด์ ์ค๋ช ํ ์ ์๋ค. ์ด๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค.
- ๊ณ์ธต์ (Hierarchical) ๋๋ ์ค์ฒฉ๋ ์์
- ์์ดํ ์ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ธฐ ์ํด ID, ์ธ๋ฑ์ค ๋๋ ๊ธฐํ ๊ธฐ๋ณธ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ์ด ์ผ๋ฐ์
- ์ถ๊ฐ์ ์ธ parameters์ ํจ๊ป์ธ Queries
- ์ถ๊ฐ ์ต์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋๊ฒ์ด ์ผ๋ฐ์
1// An individual todo2useQuery({ queryKey: ['todo', 5], ... })34// An individual todo in a "preview" format5useQuery({ queryKey: ['todo', 5, { preview: true }], ...})67// A list of todos that are "done"8useQuery({ queryKey: ['todos', { type: 'done' }], ... })
3. Query Keys๋ ๊ฒฐ๋ก ์ ์ผ๋ก ํด์ ์ฒ๋ฆฌ๋จ
์ฆ, ๊ฐ์ฒด ์์ key๋ค์ ์์์๋ ์๊ด์์ด, ๋ค์์ query๋ค์ ๋ชจ๋ ๋์ผํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
1useQuery({ queryKey: ['todos', { status, page }], ... })2useQuery({ queryKey: ['todos', { page, status }], ...})3useQuery({ queryKey: ['todos', { page, status, other: undefined }], ... })
๊ทธ๋ฌ๋ ๋ค์ query keys๋ ๋์ผํ์ง ์์ต๋๋ค. ๋ฐฐ์ด ์์์ ์์๊ฐ ์ค์ํฉ๋๋ค!
1useQuery({ queryKey: ['todos', status, page], ... })2useQuery({ queryKey: ['todos', page, status], ...})3useQuery({ queryKey: ['todos', undefined, page, status], ...})
4. ์ฟผ๋ฆฌ ํจ์๊ฐ ์ฟผ๋ฆฌ ํค์ ํฌํจ๋ ๋ณ์์ ์์กดํ๋ ๊ฒฝ์ฐ
query keys๋ ๊ฐ์ ธ์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํ๊ฒ ๊ธฐ์ ํ๊ธฐ ๋๋ฌธ์, ๋ณ๊ฒฝ๋๋ ๋ชจ๋ ๋ณ์๋ฅผ ์ฟผ๋ฆฌ ํจ์์ ํฌํจํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด:
1function Todos({ todoId }) {2const result = useQuery({3queryKey: ['todos', todoId],4queryFn: () => fetchTodoById(todoId),5})6}
query keys๋ query ํจ์์ ๋ํด ์ข
์์ ์ธ ์ญํ ์ ํ๋ค๋ ๊ฒ์ ์์๋์ธ์.
์ข
์ ๋ณ์๋ฅผ query keys์ ์ถ๊ฐํ๋ฉด query๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์บ์๋๊ณ ,
๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค, query๊ฐ ์๋์ผ๋ก refetch๋ฉ๋๋ค.(stableTime ์ค์ ์ ๋ฐ๋ผ)
์์ธํ ๋ด์ฉ๊ณผ ์์ ๋ ์ ์ฒด ์ข
์ ๋ณ์ ์น์
์ ์ฐธ์กฐํ์ญ์์ค.
5. ๋ ์์๋ณด๊ธฐ
- ๋ ํฐ ์์ฉ ํ๋ก๊ทธ๋จ์์ query keys๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํ์ Effective React query keys, 8-effective-react-query-keys๋ฅผ ์ดํด๋ณด๊ณ
- ๋ค์์์ ์ฟผ๋ฆฌ ํค ํฉํ ๋ฆฌ ํจํค์ง, query-key-factory๋ฅผ ํ์ธํ์ญ์์ค