로그인 여부(data가 불러와진 상태)를 알고 싶을때 혹은
데이터를 완전히 다 불러오기 전(isLoading)의 상태를 알기 위해서는
useQuery를 사용해야 한다고 해서 해당 사용법에 대해서 공부해보고자 한다.
: 외부에서 가져오는 데이터(상태) 관리하기가 용이하다
const {data, isLoading, error...} = useQuery();
useQuery는 data, isLoading, error 외에도 많은 것들을 제공한다
로딩중인지
에러처리
: 에러가 생길 경우 에러 객체가 담긴 속성
캐싱
: 데이터를 자동으로 캐싱해서 동일한 요청이 여러번 있으면 캐싱된 값을 보내준다
갱신과 재로딩
: useQuery에 전달하는 queryKey에 든 값이 바뀌면 갱신 및 재로딩을 한다
import {useQuery} from 'react-query';
import * as authApi from './authApi';
function sample () {
// useQuery 훅을 이용해서 데이터를 가져오기
const {isLoading, error, data} = useQuery({
queryKey: ['user'],
async queryFn() {
const response = await authApi.fetchUser();
if (!response.ok) {
throw new Error();
}
return response.json();
},
staleTime: 밀리초
})
}
쿼리 키를 기준으로 데이터를 캐싱함
: 여러 컴포넌트에서 동일한 쿼리키 값으로 useQuery를 통해 요청을 하면, 캐싱된 값을 반환함.
상태가 변경되는 변수를 queryKey에 넣어주면
react Query가 자동으로 해당 데이터에 대한 새로운 요청을 보내고,
새로운 응답을 받을 수 있다 ⭐️ ⭐️ ⭐️
// 필수 항목 예시
queryKey: ['user', 'list', 104324] // 104324 유저의 리스트
// 필수 항목 아닌 경우 예시
queryKey: ['board', 'detail', { user: 'lee', subject: '제목블라블라' }]
['user', { id: userId }],
데이터를 가져오는 비동기 함수임 (Promise를 반환해야함)
: 서버로부터 데이터를 받오기 위한 함수. 데이터를 반환해야 함
: 데이터가 무효해지는 시간
:쿼리를 활성화시킬건지를 결정할 수 있음
값이 변경이 되거나 조건을 만족할때만 쿼리를 활성화시킬 때 사용 (적용해보기 - 커밋 참고하기)
: 직접 useQuery를 만들어본것은 아니지만,
로그인 여부를 판단할 수 있는 걸 가져다가 사용해보았다.
useQuery 사용 : 67749cffbe8baea63cc659df931ddd704d129a6b
+enabled 사용 : f44b8970509009ee34601278ef0599f40b6cb543