April 09, 2023
리액트 쿼리가 무엇인지와 장단점, 그리고 쿼리에 대해 작성해보려 한다.
TanStack Query 공식 문서에 따르면 리액트 쿼리는 TS/JS, React, Solid, Vue와 Svelte를 위한 강력한 비동기 상태 관리 도구이다.
캐싱, 백그라운드 업데이트와 오래된 데이터를 설정 없이 다룬다.
promises, async/await와 익숙하다면, TanStack Query 사용법을 알 수 있다. 관리해야할 전역 상태, reducers, 정규화 시스템 또는 이해해야할 복잡한 설정이 없다.
TanStack Query는 구성 가능하다.
컴포넌트나 커스텀 훅의 쿼리를 구독하려면, 최소한 다음을 만족하는 useQuery
훅을 호출하라.
useMutation
을 사용해야 한다.비동기
로 작동해서 한 컴포넌트에 여러개의 useQuery가 있다면 하나가 끝나고 다음 useQuery가 실행되는 것이 아닌 두개의 useQuery가 동시에 실행된다. 여러개의 비동기 query가 있다면 useQueries
를 추천한다.enabled
를 사용하면 useQuery를 동기적으로 사용 가능하다.useMutation
훅을 제공한다.const App = () => {
const { isLoading, isSuccess, mutate } = useMutation({
mutationFn: (newTodo) => {
return axios.post('/todos', newTodo)
},
})
return (
<button
onClick={() => {
mutate({
id: new Date(),
title: "Do laundry",
})
}}
>
Create Todo
</button>
)
}
function Todos({ todoId }) {
const result = useQuery({
queryKey: ['todos', todoId],
queryFn: () => fetchTodoById(todoId),
})
}
useQuery({ queryKey: ['todos'], queryFn: fetchAllTodos })
useQuery({ queryKey: ['todos', todoId], queryFn: () => fetchTodoById(todoId) })
useQuery({
queryKey: ['todos', todoId],
queryFn: ({ queryKey }) => fetchTodoById(queryKey[1]),
})