서버 상태 관리란
서버에 저장된 데이터들과의 동기화, 즉 CRUD를 의미한다
$ npm i @tanstack/react-query
Provider를 만든다
import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query'
const queryClient = new QueryClient()
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<Example />
</QueryClientProvider>
)
}
$ npm i @tanstack/react-query-devtools
(생략)
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<Example />
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
)
}
const obj1 = useQuery(options)
const obj2 = useMutation(options)
안에 options 정보를 넣어주면 객체가 리턴되는 형태이다.
options 안에 들어갈 것과 obj 안에 들어가는 것은 정말 다양하다.
그 다양한, 복잡하게 처리해야 할 모든 것들을 tanstack query가 가운데에서 알아서 해주기 때문에 의미가 있는 것이다.
데이터를 읽기 위해 사용하는 훅이다.
function Example() {
const { isPending, error, data } = useQuery({
queryKey: ['repoData'],
queryFn: () =>
fetch('https://api.github.com/repos/TanStack/query').then((res) =>
res.json(),
),
})
if (isPending) return 'Loading...'
if (error) return 'An error has occurred: ' + error.message
return (
<div>
<h1>{data.name}</h1>
<p>{data.description}</p>
<strong>👀 {data.subscribers_count}</strong>{' '}
<strong>✨ {data.stargazers_count}</strong>{' '}
<strong>🍴 {data.forks_count}</strong>
</div>
)
}
데이터를 조작하기 위해 사용 (Create, Update, Delete)
const { mutate: deleteExpense } = useMutation({
mutationFn: () => api.expense.deleteExpense(expenseId),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["expense"] });
goHome();
},
});