React Query는 데이터 Fetching, 캐싱, 동기화, 서버 쪽 데이터 업데이트 등을 쉽게 만들어 주는 라이브러리
→ 서버 상태 관리 라이브러리
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { QueryClient, QueryClientProvider } from "react-query";
const queryClient = new QueryClient();
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
const { isLoading, isError, data, error } = useQuery({
queryKey: ["uniqueKey"],
queryFn: fetchTodoList
});
const result = useQueries([
{
queryKey: ["uniqueKey1"],
queryFn: fetchTodoList
},
{
queryKey: ["uniqueKey2"],
queryFn: fetchNextTodoList
}
]);
const isLoading = results.some((result) => result.isLoading);
const isError = results.some((result) => result.isError);
const error = results.some((result) => result.error);
const data = results.map((result) => result.data);
const mutation = useMutation({
mutationFn: (post) => {
return axios.post('url', post)
},
onSuccess: () => {
queryClient.invalidateQueries("uniqueKey"); // post성공시 재렌더링
},
})
return (
<div>
<button
onClick={() => {
mutation.mutate({ title: "title", desc: "desc" })
}}
>
Post
</button>
</div>
)
}