경력 기술서 작성하는데 리액트 쿼리 안 쓴 지 오래돼서 면접 때 물어보면 곤란해지기 때문에 공부하고 가려고 적는 글
참고
데이터를 api 호출로 페칭하고 관리하는 라이브러리
주요 기능
npm i @tanstack/react-query
리액트 쿼리를 사용할 컴포넌트를 provider로 감싸고 react query 객체를 전달한다
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
function App() {
const queryClient = new QueryClient();
return (
<QueryClientProvider client={queryClient}>
// 여기에 들어오는 컴포넌트에서 react query 사용 가능
</QueryClientProvider>
);
}
export default App;
const { isPending, data, error } = useQuery({
queryKey: ["데이터에-키값을-부여해-관리에-사용"],
queryFn: Promise객체데이터를반환하는함수,
});
queryKey
queryFn
useInfiniteQuery
const fetchFunction = async ({ pageParam }) => {
const response = await fetch('/api/page=' + pageParam)
return response.json()
}
const {
data,
error,
fetchNextPage,
hasNextPage,
isFetching,
isFetchingNextPage,
} = useInfiniteQuery({
queryKey: ['query-key'],
queryFn: fetchFunction,
initialPageParam: 0,
getNextPageParam: (lastPage, pages) => lastPage.end_key,
})
fetchNextPage: 함수 호출 시 다음 페이지를 불러온다
hasNextPage: 다음 페이지가 있는지 확인하는 변수
getNextPageParam: queryFn에 넘겨줄 pageParams를 반환하는 함수
실제 프로젝트에서는 아직 대량의 데이터가 없어서 ㅎㅎ dummy json으로 테스트 하겠습니다~
const [users, setUsers] = useState([]);
const fetchDummyData = async () => {
try {
const response = await fetch("https://dummyjson.com/users").then((res) =>
res.json()
);
if (!response) throw new Error("no data");
setUsers(response.users);
return response.users;
} catch (error) {
console.error(error);
}
};
const prepareUsers = async () => {
const users = await fetchDummyData();
setUsers(users);
};
useEffect(() => {
prepareUsers();
}, []);
const fetchDummyData = async () => {
try {
const response = await fetch("https://dummyjson.com/users").then((res) =>
res.json()
);
if (!response) throw new Error("no data");
return response.users;
} catch (error) {
console.error(error);
}
};
const { isPending, data, error } = useQuery({
queryKey: ["user"],
queryFn: fetchDummyData,
});
와 근데 공부하면서 버전이 바껴서 그런지 하나도 기억이 안 나서 당황스러웠다
글 쓰길 잘 했다 ^_^,,,프로젝트에 쓸 때 더 빠르게 적용이 가능할 것 같다