React query를 사용해보면서 좀 더 작성해 나갈 예정.
리액트 애플리케이션에서 서버 상태 가져오기, 캐싱, 동기화 및 업데이트를 쉽게 해주는 라이브러리이며,
zero-config로도 가능하지만, 커스텀 config도 가능하다.
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
// queryclient 생성
const queryClient = new QueryClient();
root.render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
);
react query를 사용하려면 위와 같이 queryClient를 생성한 후 QueryClientProvider로 감싸줘야한다.
useQuery라는 hook을 사용하여 구성 요소를 구독할 수 있다.
import { useQuery } from '@tanstack/react-query'
function App() {
const info = useQuery(['todos'], fetchTodoList)
}
key, value 형태의 맵핑구조와 비슷하다.
// A list of todos
useQuery(['todos'], ...)
// Something else, whatever!
useQuery(['something', 'special'], ...)
// An individual todo
useQuery(["todos", 5], ...);
// An individual todo in a "preview" format
useQuery(['todo', 5, { preview: true }], ...)
// A list of todos that are "done"
useQuery(['todos', { type: 'done' }], ...)
Promise를 리턴하는 함수로 resolve 또는 Error를 전달한다.
function fetchTodoList(){
return fetch(url).then((response) => response.json());
}
import { useQuery } from "@tanstack/react-query";
function fetcher(){
return fetch("https://jsonplaceholder.typicode.com/todos").then(response => response.json())
}
export default function App() {
// 구조분해할당으로 사용할 수 있다.
const {data, isLoading, isError} = useQuery(["todos"], fetcher);
console.log(data); // useQuery를 사용하여 api로 부터 전달 받은 내용을 확인할 수 있다.
return (
<div>
</div>
);
}
Querys와 다르게 Mutatuins은 데이터를 생성/업데이트/삭제하거나 side-effect를 수행하는데 사용한다. 이 때 useMutation hook을 사용하면 된다.
const mutation = useMutation(newTodo => {
return fetch('/api', newTodo)
})
기존의 쿼리의 데이터를 무효화 시키고, refectch를 이르켜 업데이트를 하게 된다.