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가지에 대해서 알아보자