react query ์ ์ฅ์
์ค์น๋ npm install react-query
๊ทธ๋ฆฌ๊ณ root๋จ์ index.js
์์ ๊ธฐ๋ณธ์์
์ ์งํํด์ค๋ค.
// index.js ์ค๋ต
import { QueryClient, QueryClientProvider } from "react-query"
import {ReactQueryDevtools} from "react-query/devtools"
const queryClient = new QueryClient();
ReactDOM.render(
<React.StrictMode>
<QueryClientProvider client={queryClient}>
{/* devtools */}
<ReactQueryDevtools initialIsOpen={true} />
<App />
</QueryClientProvider>
</React.StrictMode>,
document.getElementById("root")
);
get์ ์ํ react query api์ด๋ค. ์ค์ง get๋ง์ด๋ฉฐ post, update๋ useMutation
์ ์ฌ์ฉ
์ฒซ๋ฒ์งธ parameter๋ก unique key๊ฐ ๋ค์ด๊ฐ๊ณ ๋๋ฒ์งธ๋ ๋น๋๊ธฐ ํจ์, ์ฆ api ํธ์ถ์ด ๋ค์ด๊ฐ๋ค.
useQueries
์์์์๋ ์๋์ ๊ฐ๋ค. ์ถ์ฒ๋ https://kyounghwan01.github.io/blog/React/react-query/basic/#usequery
const Todos = () => {
const { isLoading, isError, data, error } = useQuery("todos", fetchTodoList, {
refetchOnWindowFocus: false, // react-query๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์๋์ฐ๊ฐ ๋ค๋ฅธ ๊ณณ์ ๊ฐ๋ค๊ฐ ๋ค์ ํ๋ฉด์ผ๋ก ๋์์ค๋ฉด ์ด ํจ์๋ฅผ ์ฌ์คํํฉ๋๋ค. ๊ทธ ์ฌ์คํ ์ฌ๋ถ ์ต์
์
๋๋ค.
retry: 0, // ์คํจ์ ์ฌํธ์ถ ๋ช๋ฒ ํ ์ง
onSuccess: data => {
// ์ฑ๊ณต์ ํธ์ถ
console.log(data);
},
onError: e => {
// ์คํจ์ ํธ์ถ (401, 404 ๊ฐ์ error๊ฐ ์๋๋ผ ์ ๋ง api ํธ์ถ์ด ์คํจํ ๊ฒฝ์ฐ๋ง ํธ์ถ๋ฉ๋๋ค.)
// ๊ฐ์ ๋ก ์๋ฌ ๋ฐ์์ํค๋ ค๋ฉด api๋จ์์ throw Error ๋ ๋ฆฝ๋๋ค. (์ฐธ์กฐ: https://react-query.tanstack.com/guides/query-functions#usage-with-fetch-and-other-clients-that-do-not-throw-by-default)
console.log(e.message);
}
});
if (isLoading) {
return <span>Loading...</span>;
}
if (isError) {
return <span>Error: {error.message}</span>;
}
return (
<ul>
{data.map(todo => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
);
};