๐ Front-End/React.js
๋ณ์ด๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธํ๋๋ก ์๋ฒ์ ๋คํธ์ํฌ ํธ์ถ์ ์ค์ ํฉ๋๋ค. ex) ๋ธ๋ก๊ทธ ํฌ์คํธ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ์ญ์ ๋๋ ๋ณ๊ฒฝ ๋ฑ โ useMutation ํน์ง ์ผ๋ถ ์์ธ๋ฅผ ์ ์ธํ๊ณ useQuery ์ ์๋นํ ์ ์ฌ ํฉ๋๋ค. mutate ํจ์ ๋ฅผ ๋ฐํํ๋๋ฐ ์ด ํจ์๋, ์ฌ์ฉ์์ ๋ณ๊ฒฝ ์ฌํญ์ ํ ๋๋ก ์๋ฒ๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก ์ฟผ๋ฆฌ ํค๋ ํ์ํ์ง ์์ต๋๋ค. isLoading ์ ์กด์ฌ ํ์ง๋ง, isFetching ์ ์์ต๋๋ค. ๋ณ์ด์ ๊ด๋ จ๋ ์บ์๋ ์กด์ฌํ์ง ์๊ณ , ์ฌ์๋ ๋ํ ๊ธฐ๋ณธ๊ฐ ์
๋๋ค. ๊ณต์ ๋ฌธ์ : Mutations ์ ์ฉ ๋๋ฏธ API ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ค์ ๋ก ๋ณ์ด๋ฅผ ์ ์ฉ ํ ์๋ ์์ง๋ง, ๋ณ์ด๊ฐ ์งํ๋๋ ๋์ ์ด๋ค ์ผ์ด ์ผ์ด๋๋์ง ๋ํด ์ฌ์ฉ์์๊ฒ ์ด๋ฅผ ์๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด..
๐ Front-End/React.js
isFetching ๋น๋๊ธฐ ์ฟผ๋ฆฌ ํจ์๊ฐ ํด๊ฒฐ๋์ง ์์์ ๋ ํด๋น ํฉ๋๋ค. ( ์์ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค ) isLoading isFetching์ด ์งํ ์ค์ด๊ณ , ์ฟผ๋ฆฌ์ ๋ํด ์บ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ์ฆ, isLoading ์ํ์ด๋ฉด isFetching ๋ํ ์งํ ์ค์ธ ์ํ ์
๋๋ค. ( ๋์์ true ) isLoading ์ ์บ์๋ ๋ฐ์ดํฐ๊ฐ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ํฉ์ ํด๋นํ๋ isFetching ์ ๋ถ๋ถ ์งํฉ ์
๋๋ค. ์์ const {data, isLoading, isError, error} = useQuery(['posts', currentPage], () => fetchPosts(currentPage), {staleTime : 2000, keepPreviousData : true}..
๐ Front-End/React.js
ํ์ด์ง ๋งค๊น(Pagination)์ ๊ตฌํํ ์ง๋ ํฌ์คํ
์์๋ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์ง ์์์ต๋๋ค. ํ์ด์ง๊ฐ ์บ์์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. Next Page ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค ํ์ด์ง๊ฐ ๋ก๋ฉ๋๊ธธ ๊ธฐ๋ค๋ ค์ผ ํ์ต๋๋ค. ์ด๋ฒ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ ์บ์์ ๋ฃ์ด์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. Prefetching โ ํ๋ฆฌํจ์นญ์ ๋ฐ์ดํฐ๋ฅผ ์บ์์ ์ถ๊ฐํ๋ฉฐ , ๊ตฌ์ฑํ ์ ์๊ธด ํ์ง๋ง ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ง๋ฃ(stale) ์ํ ์
๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋ ๋ง๋ฃ ์ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ ธ์ต๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค์๋ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ํ๋ฉด์ ๋ํ๋
๋๋ค. ๋ฌผ๋ก ์บ์๊ฐ ๋ง๋ฃ๋์ง ์์๋ค๋ ๊ฐ์ ํ์ ์ผ ์
๋๋ค. ์ด๋ ๊ฒ ์ถํ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ๋ฒํ ๋ชจ๋ ๋ฐ์ดํฐ์ ํ๋ฆฌํจ์นญ์ ์ฌ์ฉ ํฉ๋๋ค. ํ์ด์ง ๋งค๊น, ๋ค์์ ์ฌ์ฉ์๊ฐ ..
๐ Front-End/React.js
ํ์ฌ ํ์ด์ง(current Page) ์ํ๋ฅผ ํตํด, ํ์ฌ ํ์ด์ง๋ฅผ ํ์
ํ๋ ํ์ด์ง ๋งค๊น ๋ฐฉ๋ฒ ๋๊ธ์์ ์์
ํ๋ ๊ฒ์ฒ๋ผ ํ์ด์ง๋ง๋ค ๋ค๋ฅธ ์ฟผ๋ฆฌ ํค ๊ฐ ํ์ ํฉ๋๋ค. ๋ฐ๋ผ์, ์ฟผ๋ฆฌ ํค๋ฅผ ๋ฐฐ์ด ๋ก ์
๋ฐ์ดํธํด์ ๊ฐ์ ธ์ค๋ ํ์ด์ง ๋ฒํธ๋ฅผ ํฌํจ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฌ์ฉ์๊ฐ ๋ค์, ๋๋ ์ด์ ํ์ด์ง๋ก ๊ฐ๋ ๋ฒํผ์ ๋๋ฅด๋ฉด currentPage ์ํ๋ฅผ ์
๋ฐ์ดํธ ํฉ๋๋ค. ๊ทธ๋ผ React Query ๊ฐ ๋ฐ๋ ์ฟผ๋ฆฌ ํค๋ฅผ ๊ฐ์งํ๊ณ ์๋ก์ด ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ ์ ํ์ด์ง๊ฐ ํ์๋ฉ๋๋ค. โ Posts.js import React, { useState } from "react"; import { useQuery } from "react-query"; import { PostDetail } from "./PostDetail"; const ma..
๐ Front-End/React.js
โ Posts.js import React, { useState } from "react"; import { useQuery } from "react-query"; import { PostDetail } from "./PostDetail"; const maxPostPage = 10; async function fetchPosts() { const response = await fetch( "https://jsonplaceholder.typicode.com/posts?_limit=10&_page=0" ); return response.json(); } export function Posts() { const [currentPage, setCurrentPage] = useState(0); const [sel..
๐ Front-End/React.js
Stale Data ( ๋ง๋ฃ๋ ๋ฐ์ดํฐ ) โ ์๋ฅผ ๋ค์ด ์ค๋๋ ์๋นต๊ณผ ๋น์ทํ๋ค๊ณ ํ ์ ์์ต๋๋ค. React Query ์์ ๋ฐ์ดํฐ๊ฐ ๋ง๋ฃ๋๋ค๋ ๊ฒ์ ๋ฌด์จ ๋ป์ธ๊ฐ โ ๋ฐ์ดํฐ ๋ฆฌํจ์นญ(Refetching) ์ ๋ง๋ฃ๋ ๋ฐ์ดํฐ ์์๋ง ์คํ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ง์ดํธ๋๊ฑฐ๋ ์๋์ฐ๊ฐ ๋ค์ ํฌ์ปค์ค ๋์์ ๋๊ฐ ์์ต๋๋ค. staleTime ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ '์ต๋ ๋์ด' ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด, ๋ฐ์ดํฐ๊ฐ ๋ง๋ฃ๋๋ค๊ณ ํ๋จํ๊ธฐ ์ ๊น์ง ํ์ฉ๋๋ ์๊ฐ ์ด staleTime ์
๋๋ค. '์น์ฌ์ดํธ์ ํ์๋ ๋ฐ์ดํฐ๊ฐ 10์ด ๊น์ง๋ ๊ทธ๋๋ก์ฌ๋ ๊ด์ฐฎ๋ค' ๋ผ๊ณ ํ๋จํ๋ฉด staleTime ์ 10์ด๋ก ์ค์ ํฉ๋๋ค. stale ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์ ์๋ฏธํ์ง ์๋ค๊ณ React Query๋ ํ..
๐ Front-End/React.js
React Query ๊ฐ๋ฐ์ ๋๊ตฌ๋ ์ฑ์ ์ถ๊ฐํ ์ ์๋ ์ปดํฌ๋ํธ๋ก ๊ฐ๋ฐ ์ค์ธ ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ํ๋ฅผ ํ์ ํด์ค๋๋ค. ๋ํ ์์๋๋ก ์๋ํ์ง ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ ์๋ ์์ต๋๋ค. ์ฟผ๋ฆฌ ํค๋ก ์ฟผ๋ฆฌ๋ฅผ ํ์ํด ์ฃผ๊ณ ํ์ฑ(active), ๋นํ์ฑ(inactive), ๋ง๋ฃ(stale) ๋ฑ ๋ชจ๋ ์ฟผ๋ฆฌ์ ์ํ๋ฅผ ์๋ ค์ค๋๋ค. ๋ง์ง๋ง์ผ๋ก ์
๋ฐ์ดํธ๋ ํ์ ์คํฌํ๋ ์๋ ค์ค๋๋ค. ์ฟผ๋ฆฌ์ ์ํด ๋ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ์ ์๋ ๋ฐ์ดํฐ ํ์๊ธฐ๋ ์์ต๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ๋ณผ ์ ์๋ ์ฟผ๋ฆฌ ํ์๊ธฐ๋ ์์ต๋๋ค. ๊ณต์ ๋ฌธ์ โ ๊ฐ๋ฐ์ ๋๊ตฌ ๋ฌธ์์์ ์ฃผ๋ชฉํ๊ณ ์ถ์ ํ ๊ฐ์ง ํ๋ก๋์
๋ฒ๋ค์ ํฌํจ๋์ด ์์ง ์๋ค๋ ์ ์
๋๋ค. NODE_ENV ๋ณ์์ ๋ฐ๋ผ ํ๋ก๋์
ํ๊ฒฝ์ ์๋์ง ์ฌ๋ถ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค. CRA ๋ npm run build ๋ฅผ..
๐ Front-End/React.js
useQuery ์์ ๋ฐํ๋๋ ๊ฐ์ฒด์ ์ข
๋ฅ โ ๋ฐ์ดํฐ๊ฐ ์์ง ์ค๋น๋์ง ์์์ ๋ ๋ฐ์ดํฐ๊ฐ ์ ์๋์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋์ค๊ฒ ํ์ง ์๊ณ , ์ ์ ํ ์กฐ์น๋ฅผ ํ ์ ์์ต๋๋ค. ๊ทธ ์ค ์ดํด๋ณผ ๊ฒ์ isLoading ๊ณผ isError ์
๋๋ค. ์ด ๋๊ฐ์ง๋ ๋ฐ์ดํฐ๊ฐ ๋ก๋ฉ ์ค์ธ์ง ์ฌ๋ถ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ค๋ฅ๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ฃผ๋ boolean ์
๋๋ค. ์ ๋ฒ์ ๋ง๋ ์ฝ๋ const {data, isLoading, isError} = useQuery('posts', fetchPosts); ๋์ผํ๊ฒ ๋ฐํ ๊ฐ์ฒด์์ isLoading ๊ณผ isError ๋ฅผ ์ถ๊ฐ ํฉ๋๋ค. โ isLoadding // replace with useQuery const {data, isLoading, isError} = useQuery('post..