Link to Tanstack Query Devtools
$ npm i @tanstack/react-query-devtools
# or
$ pnpm add @tanstack/react-query-devtools
# or
$ yarn add @tanstack/react-query-devtools
// filename : Root.tsx
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
... 중략
export default function Root() {
return (
<Box>
<Header />
<Outlet />
<ReactQueryDevtools initialIsOpen={true} panelPosition={"right"}/> // 😍👍💖🤩
</Box>
);
}
// filename : api.ts
import { QueryFunctionContext } from "@tanstack/react-query";
import axios from "axios";
const instance = axios.create({
baseURL: "http://127.0.0.1:8000/api/v1/",
});
//... (중략)
export const getRoom = ({ queryKey }: QueryFunctionContext) => {
const [_, roomPk] = queryKey;
return instance.get(`rooms/${roomPk}`).then((response) => response.data);
};
npm i @tanstack/react-query-devtools
import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
// ...중략
export default function Root() {
return (
<Box>
<Header />
<Outlet />
<ReactQueryDevtools initialIsOpen={true} panelPosition={"right"}/>
</Box>
);
}
import { useQuery } from "@tanstack/react-query";
import { useParams } from "react-router-dom";
import { getRoom } from "../api";
export default function RoomDetail() {
const { roomPk } = useParams();
const { isLoading, data } = useQuery([`rooms`, roomPk], getRoom); // getRoom 함수 호출
return <h1>hello</h1>;
}
useParams() 함수를 이용하면 클라이언트가 요청한 파라미터 값을 알아낼 수 있다.
여기서는 useParams() 함수를 이용해 알아낸 파라미터 값을 roomPk 변수에 담았다.
이후 roomPk 값을 useQuery 함수에 이용하여 getRoom 함수를 호출합니다. 그리고 getRoom 함수의 리턴 값을 rooms 키 값에 저장합니다.
참고로 useQuery 함수는 매우 매우 매우 간단합니다. 예를 들어서
useQuery([rooms
, roomPk], getRoom) 라고 할경우 이것은 rooms/{roomPk} url주소로 쿼리 요청을 보내되 getRoom 함수를 이용한다는 것 입니다. 이게 끝임. 다른 예시를 하나 더 보겠습니다.
useQuery<IReview[]>([rooms
, roomPk, reviews
], getRoomReviews); 는
rooms/{roomPk}/reviews 주소로 쿼리 요청을 보내되 getRoomReviews 함수를 이용한다는 것 입니다. 이게 끝임. 어려울 게 하나도 없다.
import { QueryFunctionContext } from "@tanstack/react-query";
import axios from "axios";
const instance = axios.create({
baseURL: "http://127.0.0.1:8000/api/v1/",
});
//...중략
export const getRoom = ({ queryKey }: QueryFunctionContext) => {
const [_, roomPk] = queryKey; // const [_, roomPk] 는 queryKey 어레이 안에 들어있는 요소 중 1번째 꺼는 _ 로 받아오고 두번째 꺼는 roomPk 로 받아오라는 의미다. 알고 나면 별거 없다.
return instance.get(`rooms/${roomPk}`).then((response) => response.data);
};
rooms/${roomPk}
가 될 것이다.