해당 아티클은, 리액트 쿼리를 나 고효율 axios로 사용하는 자들을 위한 글이다.
리액트 쿼리를 왜 사용해야 하는지를 명확히 알아야한다.
그러려면, 클라 상태 vs 서버 상태에 대한 차이를 알고 넘어가보자.
먼저 클라 상태란, 웹 브라우저 세션과 관련된 모든 정보를 의미한다.
예를 들어 사용자는 가장 잘 아는 언어를 선택할 때나,
테마를 밝은 상태나 어두운 상태를 선택할 수 있는데,
이는 서버에서 일어나는 일과 아무 관련이 없다.
단순히 사용자의 상태를 추적하는 것이기 때문이다.
반면 서버 상태는
서버에 저장되지만 클라이언트에 표시되는데에 필요하다.
예를들어 블로그 게시물 데이터가 해당된다.
클라이언트에 이 데이터가 있어야만 화면에 표시할 수 있다.
리액트 쿼리는 클라이언트에서 서버 데이터 캐시를 관리한다.
리액트 코드에 서버 데이터가 필요할 때, axios를 사용해 서버로 바로 이동하지 않고,
리액트 쿼리 캐시를 요청하게 된다.
이 것이 서버 데이터를 공급받는 것이다.
리액트 쿼리 역할은, 해당 캐시의 데이터를 유지 관리하는 것이다.
데이터를 관리하는 것은 리액트 쿼리이지만,
서버의 새 데이터로 캐시를 업데이트하는 시기를 설정하는 것은 사용자의 몫이다.
먼저 나의 예전 리액트 쿼리관련 코드를 살펴보자.
export const FRIEND_GIFT_QUERY_KEY: string[] = ['friendGiftData'];
const useGetFriendGift = ({ roomId }: { roomId: number }) => {
const { data, isLoading, isError } = useQuery({
queryKey: [FRIEND_GIFT_QUERY_KEY, roomId],
queryFn: () => fetchFriendGift(roomId),
});
return { data, isLoading, isError };
};
export default useGetFriendGift;
return 값으로 data와 isLoading, isError를 설정하였다.