๐ ์บ์ = ์ฑ ์ ์์ ๋ฐ๋๋. ๋ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ฐ์ ์ฑ๋ฅ
9824 ๋จ์ด reactbeginnersfrontendjavascript
๐ค ๋ฆฌ์กํธ ์ฟผ๋ฆฌ๋?
๋ฆฌ์กํธ ์บ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Official site
๐ค ์บ์๋?
์ง๊ธ ์ง์์ ์ผํ๊ณ ๋ถ์์ ๊ฐ์ ๋ฐ๋๋๋ฅผ ๋จน๋๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. 1์๊ฐ์ด ์ง๋๋ฉด ๋ฐฐ๊ฐ ๊ณ ํ์ง๊ณ ๋ ๋ถ์์ ๊ฐ๊ณ ...
์ฑ ์ ์์ ๋ฐ๋๋ ์ฌ๋ ค๋๊ณ ๊ฐ์ ธ๊ฐ์ธ์! ๋ถ์์ ๋ช ๋ฒ์ด๊ณ ๊ฐ ํ์๊ฐ ์์ต๋๋ค.
Bananas = data
kitchen = server
your desk = cache
(1000๊ฐ์ฒ๋ผ ์ฑ ์์ ๋ฐ๋๋๋ฅผ ๋๋ฌด ๋ง์ด ์ฌ๋ ค๋์ผ๋ฉด ์ผ์ด ๋๋ฌด ํ๋ค์ด์ง๋๋ค. ์กฐ์ฌํ์ธ์)
โฌ ๋ค, ์์ธํ ์๋ ค๋๋ฆด๊ฒ์ โฌ
๐ข ๊ณ ์ ์ ์ธ ๋ฐฉ์์ ์ฝ์ ์ํ ๊ด๋ฆฌ
์๋ฒ ๋ฐ React ์ฑ ์ํ์ ๋ฐ์ดํฐ ํตํฉ
(์: Redux "์คํ ์ด")
๋ฐ๋๋์ ๋ ธํธ์ ํ๊ณผ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ค์ด ์ฑ ์ ์์์๋ ๊ฒ์ฒ๋ผ ํผ๋ ์ค๋ฝ์ต๋๋ค.
๐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋ณ๋์ ์ํ ๊ด๋ฆฌ ํ "react-query"๋ ์บ์๋ก ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๋ฐ๋๋๋ฅผ ์ํด ์ฑ ์ ์์ ์์ ์์๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๐ ๋ฐ์ ์ฟผ๋ฆฌ ์ฌ์ฉ์ ์ด์
1.๊ฐ์ ธ์ค๊ธฐ ํ์ ์ต์ ํ
์ฑ ์ ์์ ๋ฐ๋๋๋ง ์ํ๋ฉด ๋ถ์์ผ๋ก ๊ฐ์ผ ํ๋ค
2.๋ ๋์ UX(๋ก๋ ์๊ฐ ๋จ์ถ)
๋ถ์์ ๊ฐ๋ฉด ์ผ์ ํ ์ ์์ต๋๋ค. ์๊ฐ ๋ญ๋น
3. ์ ์ ์ฝ๋
โฉํด๋์ ์ฝ๋
export const useClassicalFetch = () => {
const { tasks, setTasks } = useStateContext()
const [isLoading, setLoading] = useState(false)
const [isError, setError] = useState(false)
useEffect(() => {
const fetchData = async () => {
setError(false)
setLoading(true)
try {
const res = await axios('http://hoge.com/api/tasks/')
setTasks(res.data)
} catch (error) {
setError(true)
}
setLoading(false)
}
fetchData()
}, [setTasks])
return { tasks, isLoading, isError }
}
โฉ๋ฐ์ ์ฟผ๋ฆฌ
const getTasks = async () => {
const { data } = await axios.get<Task[]>('http://hoge.com/api/tasks/')
return data
}
// *** Here definition of react-query ***
export const useQueryTasks = () => {
return useQuery<Task[], Error>({
queryKey: 'tasks',
queryFn: getTasks,
cacheTime: 10000,//10sec
staleTime: 10000,
})
}
์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
const TaskList: VFC = () => {
const { status, data } = useQueryTasks()
if (status === 'loading') return <div>{'Loading...'}</div>
if (status === 'error') return <div>{'Error'}</div>
return (
<div>
{data?.map((task) => (
// omit here
))}
</div>
)
}
๐ ๋ฐ์ ์ฟผ๋ฆฌ ๊ตฌ์ฑ ๊ฐ ์ค๋ช
staleTime
์๋ฅผ ๋ค์ด 10000ms(10์ด)๋ฅผ ์ค์ ํฉ๋๋ค.
๊ตฌ์ฑ ์์๋ฅผ ํ์ฌํ ํ ์ฒ์ 10์ด ๋์ ์บ์ ๋ฐ์ดํฐ๋ "์ ์ ํ"์ํ๊ฐ ๋๊ณ ๊ทธ ํ์๋ "๋ถ์ค(์ด์ )"๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
fresh -> using cache
stale -> fetch data from server
cacheTime
์๋ฅผ ๋ค์ด 10000ms(10์ด)๋ฅผ ์ค์ ํฉ๋๋ค.
๊ตฌ์ฑ์์ ๋ง์ดํธ ํด์ 10์ด ํ ์บ์ ๋ฐ์ดํฐ ์ญ์
refetchOnWindowFocus
์ปค์๊ฐ ์ฐฝ์ ์ด์ ์ด ๋ง์ถฐ์ง๋ฉด ์๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
// ex. When you use chrome and firefox.
use chrome
โ
use firefox
โ
use chrome, then fetch data automatically !
์ฐธ์กฐ
this page , ์ผ๋ณธ์ด๋ก ๋์ด ์์ง๋ง
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ์บ์ = ์ฑ ์ ์์ ๋ฐ๋๋. ๋ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ฐ์ ์ฑ๋ฅ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/kaziusan/cache-banana-on-your-desk-react-performance-with-react-query-5ghbํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค