useQuery
훅을 사용하여 데이터를 가져올 수 있습니다.queryKey
와 queryFn
을 인자로 받아 데이터를 패칭합니다.import { useQuery } from 'react-query';
import axios from 'axios';
const fetchData = async () => {
const { data } = await axios.get('/api/data');
return data;
};
const MyComponent = () => {
const { data, error, isLoading } = useQuery('dataKey', fetchData);
if (isLoading) return <div>Loading...</div>;
if (error) return <div>Error: {error.message}</div>;
return <div>{data}</div>;
};
import useSWR from 'swr';
import axios from 'axios';
const fetcher = url => axios.get(url).then(res => res.data);
const MyComponent = () => {
const { data, error } = useSWR('/api/data', fetcher);
if (!data) return <div>Loading...</div>;
if (error) return <div>Error: {error.message}</div>;
return <div>{data}</div>;
};
useInfiniteQuery
를 사용하여 데이터를 페이지 단위로 패칭합니다.import { useInfiniteQuery } from 'react-query';
import axios from 'axios';
const fetchInfiniteData = async ({ pageParam = 1 }) => {
const { data } = await axios.get(`/api/data?page=${pageParam}`);
return data;
};
const MyComponent = () => {
const {
data,
fetchNextPage,
hasNextPage,
isFetchingNextPage,
} = useInfiniteQuery('infiniteData', fetchInfiniteData, {
getNextPageParam: (lastPage, pages) => lastPage.nextPage ?? false,
});
return (
<div>
{data.pages.map(page => (
<div key={page.id}>{page.content}</div>
))}
<button
onClick={() => fetchNextPage()}
disabled={!hasNextPage || isFetchingNextPage}
>
{isFetchingNextPage ? 'Loading more...' : hasNextPage ? 'Load More' : 'No More Data'}
</button>
</div>
);
};
produce
함수를 사용하여 상태를 업데이트합니다.import produce from 'immer';
const nextState = produce(state, draft => {
draft.value = newValue;
});
import create from 'zustand';
import { persist } from 'zustand/middleware';
const useStore = create(persist(
(set) => ({
value: 0,
increment: () => set((state) => ({ value: state.value + 1 })),
}),
{ name: 'my-store' }
));
오늘 배운 내용을 통해 TanStack Query와 SWR을 활용한 비동기 데이터 패칭 방법을 익혔고, Zustand를 사용한 상태 관리를 이해하게 되었습니다. 특히, Immer를 사용하여 불변성을 유지하면서 상태를 쉽게 업데이트하는 방법과 Persist를 사용하여 상태를 로컬 스토리지에 저장하고 복원하는 방법을 배웠습니다. 이를 통해 더 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있게 되었습니다.