
React-Query 역할에 대해 알아보자.
프로젝트를 통해 react-query의 기본 개념을 배워보자 !

App.tsx에 QueryClient를 설정하자.

useQuery의 기본 속성 queryKey, queryFn 사용해보자 !

ReactQuery가 반환하는 객체의 속성에 대해 알아보자. (isLoading, isFetching, isError, error)

react-query-devtools 패키지를 설치하고, 왜 필요한지, dev 환경에서 어떤 정보를 얻을 수 있는지 알아보자.

staleTime은 data를 refetch할 때까지의 시간이고, gcTime은 캐시에서 data가 얼마나 오래있을 건지의 시간이다.
id 와 같은 중요한 정보를 queryKey의 종속성 배열에 추가해줘야 한다. 그래야 별도의 캐시 공간을 가지고, 화면에 해당되는 data가 출력된다. 그리고 inactive 상태에서 gcTime이 다 지나면 캐시에서 사라진다.

useQuery에 currentPage를 전달해서 그에 맞는 데이터가 나오도록 해보자. 그런데 페이지 넘길 때 로딩하는 문제가 생긴다. 그건 다음 시간에 !

prefetch를 통해 미리 데이터를 캐시에 저장한다. 그러면 사용자의 페이지보다 더 앞서고, 사용자는 데이터를 기다릴 필요가 없어진다.

isFetching은 캐시된 데이터를 불러오는 것 + 서버에서 불러오는 것, isLoading은 캐시에도 data가 없어서 서버에서 로딩 시간이 걸리는것.

useMutation은 mutate 함수를 반환 , query key가 필요 없음 , 캐시에 데이터를 저장하지 않아 isFetching은 없다. 기본적으로 재시도도 없음 !

useMutation을 통해 mutate 함수를 사용할 수 있다.

isPenging, isError, isSuccess 속성에 대해 알아보자. 그리고 reset() 을 통해서 원하는 때에만 글자가 뜨게 해보자.

mutation 로딩과 에러 상태를 관리하기 위한 전역적 관리 코드를 작성해보자.

더 큰 앱에서의 react-query의 setup, 중앙집중화, custom hooks에 대해 알아보자.

react-query-devtools, eslint 설치

자체 파일에 QueryClientProvider 를 생성하고 app 파일에서 이를 가져다 쓴다.

useQuery 커스텀 훅을 작성해서 함수를 재사용해보자. 이는 유지보수를 쉽게 만들어줄 것임 !

useQuery의 data를 호출할 때 'undefined'의 오류를 빈 배열인 fallback으로 해결한다. 이를 통해 데이터를 불러오기 전 잠깐 빈 배열, 빈화면이 보인다.

useQuery가 반환한 객체에 있는 isFetching을 통해 각 컴포넌트의 데이터 fetch 상태를 관리하지 말고, loading 컴포넌트에서 useIsfetching 을 사용해서 손쉽게 data fetching 상태를 관리하자.

queryClient 생성할 때, QueryCache의 default 로 onError를 활용한다!


useInfiniteQuery를 통해 데이터를 효율적으로 불러오자. 객체로 정보를 반환받아서, 전체 데이터를 어떻게 관리하면 좋을지 알 수 있다. (전체 페이지 수, 다음 페이지, 이전 페이지, 현재 데이터 등 )

반환하는 데이터는 객체이고 pages, pageParams의 프로퍼티를 가지고 있다. 그 외syntax, options를 알아보자.

전체적인 흐름을 알아보자.

useInfiniteQuery 함수 활용

사용자가 페이지 어떤 지점에 도달했을 때 그걸 인식하는 InfiniteScroll 컴포넌트를 활용해보자. 그 컴포넌트는 loadMore 함수와 hasMore 함수 가 필요하다.

Loading, isError 상태를 관리함으로써 data undefined 이슈를 해결

React-query에서 data를 미리 load하는 방법 4가지에 대해서 알아보자