스프린트 과정을 열심히 달려가다 보니, 리액트 쿼리에 대한 정보를 접하게 되었다.
점점 상태관리와 서버 상태, 데이터 관리에 대한 중요성을 알게 되었지만 어떻게 해야 할 지 막막할 때, 리액트 쿼리(지금은 TansStack이다)의 기능을 통해 효과적으로 처리할 수 있다는 것을 알게 되었다.
TanStack Query란 무엇인지, 왜 사용하는지 한 번 알아보도록 하자!
서버 상태 가져오기, 캐싱, 동기화 및 업데이트를 보다 쉽게 다룰 수 있도록 도와주는 라이브러리이다. 클라이언트 상태와 서버 상태를 명확히 구분하기 위해 만들어졌다.
데이터를 불러오다 보면 코드가 복잡해지는 경우가 많은데, 그런 방식과 달리 간단하고 직관적으로 사용할 수 있다.
npm install @tanstack/react-query
해당 라이브러리를 설치한 후, QueryClient를 import해서 새로운 쿼리 클라이언트를 만들어야 한다. 그리고 그것을 QueryClientProvider를 통해 App 컴포넌트의 자손 컴포넌트에 전달해야 한다.
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import HomePage from './HomePage';
const queryClient = new QueryClient();
function App() {
return (
<QueryClientProvider client={queryClient}>
<HomePage />
</QueryClientProvider>
);
}
export default App;
useQuery 공식문서
TanStack Query에 존재하는 다양한 API중 하나로, GET 요청에 대한 데이터를 관리한다.
useQuery({
queryKey: ['posts', username],
queryFn: () => getPostsByUsername(username),
staleTime: 60 * 1000,
});
queryKey
필수 값이고, 해당 쿼리에 사용할 쿼리 키이다.
queryFn
백엔드에서부터 데이터를 받아오는 함수를 지정해주자.
staleTime
데이터가 언제까지 fresh 상태를 유지할 것인지 정할 수 있다.
isPending
, isError
를 통해 로딩 처리와 에러 처리 또한 가능하다.
정말 너무너무 많으므로 다른 것이 궁금하면 공식문서를 참고하도록 하자!
데이터베이스에 값을 추가하거나 변경, 삭제하는 경우 사용한다. POST
, PATCH
, PUT
, DELETE
요청에 대한 데이터를 관리한다.
const mutation = useMutation({
mutationFn: PatchByUsername(name),
onMutate() {
/* ... */
},
onSuccess(data) {
console.log(data);
},
onError(err) {
console.log(err);
},
onSettled() {
/* ... */
},
});
onSuccess
, onError
메서드를 통해 성공했을 시, 실패했을 시 response 데이터를 핸들링할 수 있다.
onMutate
는 mutation 함수가 실행되기 전에 실행되고, mutation 함수가 받을 동일한 변수가 전달된다.
onSettled
는 try...catch...finally 구문의 finally처럼 요청이 성공하든 에러가 발생하든 상관없이 마지막에 실행된다.
TanStack Query
react-query-tutorial
카카오페이 프론트엔드 개발자들이 React Query를 선택한 이유