๋ชฉ์ฐจ
react query v5 ๋ฆฌ์กํธ ์ฟผ๋ฆฌ v5์ ์ฃผ์ ๋ณ๊ฒฝ์ฌํญ
๋ฆฌ์กํธ ์ฟผ๋ฆฌ v5์์๋ ๋ง์ ์ค์ํ ๋ณํ๊ฐ ์์์ต๋๋ค. ์ด react query v5 ๋ณํ๋ค์ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ณด๋ค ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ฝ๋ ์์ฑ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๋จ์ผ ๊ฐ์ฒด ์๊ทธ๋์ฒ ์ง์: ์ด์ ๋ฒ์ ์์๋
useQuery
์ ๊ฐ์ ํจ์๋ค์ด TypeScript์์ ๋ค์ํ ์ค๋ฒ๋ก๋ฉ์ ์ง์ํ์ต๋๋ค. ์ด์ v5์์๋ ๊ฐ์ฒด ํ์๋ง์ ์ง์ํ์ฌ, ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํด์ก์ต๋๋คใ7ใ. queryClient.getQueryData
๋ฐqueryClient.getQueryState
๋ณ๊ฒฝ: ์ด์ ์ด ํจ์๋ค์queryKey
๋ง์ ์ธ์๋ก ๋ฐ์ต๋๋ค. ์ด๋ API์ ์ผ๊ด์ฑ์ ๋์ด๊ณ , ์ฌ์ฉ์ ๋จ์ํ๋ฅผ ๊ฐ์ ธ์ต๋๋คใ8ใใ9ใ.- ์ฝ๋๋ชจ๋ ์ ๊ณต: ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋ ์ค๋ฒ๋ก๋ฉ์ ์ ๊ฑฐํ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋๊ธฐ ์ํด ์ฝ๋๋ชจ๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ์ฝ๋๋ฅผ ์๋ก์ด ๋ฒ์ ์ ๋ง๊ฒ ์๋์ผ๋ก ์์ ํ ์ ์์ต๋๋คใ9ใ.
- ์ฝ๋ฐฑ ์ ๊ฑฐ:
useQuery
์QueryObserver
์์onSuccess
,onError
,onSettled
์ ๊ฐ์ ์ฝ๋ฐฑ์ด ์ ๊ฑฐ๋์์ต๋๋ค. ์ด๋ API๋ฅผ ๋์ฑ ๊ฐ๊ฒฐํ๊ฒ ํ๊ธฐ ์ํ ์กฐ์น์ ๋๋คใ10ใ. refetchInterval
์ฝ๋ฐฑ ๋ณ๊ฒฝ: ์ด์ refetchInterval
์ฝ๋ฐฑ์query
๋ง์ ์ธ์๋ก ๋ฐ์ต๋๋ค. ์ด๋ ์ฝ๋ฐฑ ํธ์ถ ๋ฐฉ์์ ๊ฐ์ํํ๊ณ ,select
์ ์ํด ๋ณํ๋ ๋ฐ์ดํฐ์ ํ์ดํ ์ด์๋ฅผ ํด๊ฒฐํฉ๋๋คใ11ใ.useQuery
์์remove
๋ฉ์๋ ์ ๊ฑฐ: ์ด์ ์๋remove
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ ์บ์์์ ์ฟผ๋ฆฌ๋ฅผ ์ ๊ฑฐํ์ง๋ง, ์ด์ ๋queryClient.removeQueries
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋คใ12ใ.- ์ต์ TypeScript ๋ฒ์ ์ ๋ฐ์ดํธ: v5์์๋ ์ต์ TypeScript ๋ฒ์ ์ด 4.7๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค. ์ด๋ ํ์ ์ถ๋ก ๊ณผ ๊ด๋ จ๋ ์ค์ํ ์์ ๋๋ฌธ์ ๋๋คใ13ใ.
useQuery
์isDataEqual
์ต์ ์ ๊ฑฐ: ์ด ์ต์ ์ ์ด์ ์ ์ฟผ๋ฆฌ์ ํด๊ฒฐ๋ ๋ฐ์ดํฐ๋ก ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋์์ต๋๋ค. ์ด์ ๋structuralSharing
์ ํตํด ๋์ผํ ๊ธฐ๋ฅ์ ๋ฌ์ฑํ ์ ์์ต๋๋คใ14ใ.- ์ฌ์ฉ์ ์ ์ ๋ก๊ฑฐ ์ ๊ฑฐ: v4์์ ์ด๋ฏธ ํ๊ธฐ๋ ์ฌ์ฉ์ ์ ์ ๋ก๊ฑฐ ๊ธฐ๋ฅ์ด ์ด์ ์์ ํ ์ ๊ฑฐ๋์์ต๋๋คใ15ใ.
- ์ง์๋๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ: ๋ธ๋ผ์ฐ์ ์ง์ ๋ชฉ๋ก์ด ์ ๋ฐ์ดํธ๋์ด ๋ ํ๋์ ์ด๊ณ ์ฑ๋ฅ์ด ์ข์ ๋ฒ๋ค์ ์์ฑํฉ๋๋คใ16ใ.
- ํ๋ผ์ด๋น ํด๋์ค ํ๋ ๋ฐ ๋ฉ์๋ ์ฌ์ฉ: ์ด์ ECMAScript์ ํ๋ผ์ด๋น ํด๋์ค ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ํ๋ผ์ด๋นํ ํ๋์ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋คใ17ใ.
cacheTime
์gcTime
์ผ๋ก ์ด๋ฆ ๋ณ๊ฒฝ:cacheTime
์ ์ฟผ๋ฆฌ๊ฐ ์ฌ์ฉ๋์ง ์์ ๋๋ง ์๋ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ "๊ฐ๋น์ง ์ปฌ๋ ์ "๋ ๋๊น์ง์ ์๊ฐ์ ์๋ฏธํฉ๋๋คใ18ใ.useErrorBoundary
์ต์ ์ ์ด๋ฆ์throwOnError
๋ก ๋ณ๊ฒฝ: ์ด๋useErrorBoundary
์ต์ ์ ๋ ํ๋ ์์ํฌ์ ์ค๋ฆฝ์ ์ด๋ฉฐ ์ง๊ด์ ์ผ๋ก ๋ง๋ค๊ธฐ ์ํ ๋ณ๊ฒฝ์ ๋๋ค. ์ด์ ์ด ์ต์ ์ ์๋ฌ ๋ฐ์ ์ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๊ธฐ๋ฅ์ ๋ ๋ช ํํ๊ฒ ๋ฐ์ํฉ๋๋คใ19ใ.- TypeScript์์ ๊ธฐ๋ณธ ์ค๋ฅ ํ์
๋ณ๊ฒฝ: ์ด์ TypeScript์์
error
ํ๋์ ๊ธฐ๋ณธ ํ์ ์unknown
์ด ์๋Error
์ ๋๋ค. ์ด๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํ ๋ณ๊ฒฝ์ ๋๋คใ20ใ. - eslint ๊ท์น ๋ณ๊ฒฝ: ์ด์ ๊ฐ์ฒด ๊ตฌ๋ฌธ๋ง ์ง์๋๋ฏ๋ก
eslint prefer-query-object-syntax
๊ท์น์ด ์ ๊ฑฐ๋์์ต๋๋คใ21ใ. keepPreviousData
์ต์ ์ ๊ฑฐ:keepPreviousData
์ต์ ๊ณผisPreviousData
ํ๋๊ทธ๊ฐ ์ ๊ฑฐ๋์์ผ๋ฉฐ, ์ด์ placeholderData
์isPlaceholderData
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์ต๋๋คใ22ใ.- ์๋์ฐ ํฌ์ปค์ค ์ฌ์์ฒญ ๋ณ๊ฒฝ: ์ด์ ์๋์ฐ ํฌ์ปค์ค ์ฌ์์ฒญ์
focus
์ด๋ฒคํธ ๋์visibilitychange
์ด๋ฒคํธ๋ฅผ ์ ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์ง์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๊ฐ๋ฅํด์ก์ผ๋ฉฐ, ๊ด๋ จ ๋ฌธ์ ๋ค์ ํด๊ฒฐํฉ๋๋คใ23ใ. - ๋คํธ์ํฌ ์ํ ํ์ธ ๋ฐฉ๋ฒ ๋ณ๊ฒฝ: ์ด์
navigator.onLine
์์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ,online
๊ณผoffline
์ด๋ฒคํธ๋ง์ ๋ฃ์ต๋๋ค. ์ด๋navigator.onLine
์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ , ๋ ์ ํํ ๋คํธ์ํฌ ์ํ ํ์ธ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋คใ24ใ. - ์ปค์คํ
์ปจํ
์คํธ ํ๋กญ ์ ๊ฑฐ: ์ด์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ ํ
์ ์ปค์คํ
context
๋ฅผ ์ ๋ฌํ๋ ๋์ , ์ปค์คํ queryClient
์ธ์คํด์ค๋ฅผ ์ง์ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ ์์ํฌ์ ์ค๋ฆฝ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ๋ฉฐ, ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋์์์ ๊ฒฉ๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
์ด์ ๊ฐ์ ๋ณํ๋ค์ ๋ฆฌ์กํธ ์ฟผ๋ฆฌ v5๋ฅผ ๋ ๊ฐ๋ ฅํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๋๊ตฌ๋ก ๋ง๋ค์ด ์ค๋๋ค. ๊ฐ๋ฐ์๋ค์ ์ด๋ฌํ ๋ณ๊ฒฝ์ฌํญ์ ์์งํ๊ณ ์ ์ ํ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ธ๋ก๊ทธ ํฌ์คํ ์ ํฌํจ๋ ์ฃผ์ ํค์๋: ๋ฆฌ์กํธ ์ฟผ๋ฆฌ v5, TypeScript, ์ฝ๋๋ชจ๋, useQuery, queryClient, API ๋ณ๊ฒฝ, ํ๋ผ์ด๋น ํด๋์ค, ๋คํธ์ํฌ ์ํ, ๋ง์ด๊ทธ๋ ์ด์ , ํ๋ ์์ํฌ ์ค๋ฆฝ์ , ๋ง์ดํฌ๋ก ํ๋ก ํธ์๋.
๋ฐ์ํ
๋๊ธ