React Query
비동기 데이터 관리를 편리하게 할 수 있도록 도와주는 라이브러리.
데이터를 가져오고, 캐싱하고, 동기화하는 과정에서 개발자가 직접 상태를 관리하지 않아도 됨.
React Query 장점
- 자동 캐싱: 같은 queryKey로 데이터를 요청하면 이미 가져온 데이터를 캐싱하여 불필요한 요청을 줄임.
- 자동 리패치: 데이터가 변경되면 자동으로 새로고침하여 최신 상태 유지.
- 로딩 및 에러 핸들링 내장: isLoading, isError 등의 상태를 제공하여 쉽게 관리 가능.
* 서버 데이터를 중심으로 전역 상태를 유지하고, 최신 상태를 유지하고 싶다면, Redux보다 더 적합.
* UI 상태나 로그인 여부 같은 서버와 관련 없는 상태는 Redux가 더 적합.
useQuery
React Query에서 데이터를 가져올 때(GET 요청) 사용하는 훅.
이를 사용하면 자동으로 데이터를 캐싱하고, 로딩 상태 및 오류 상태를 관리.
* useQuery 인자
- 쿼리 키 (Query Key)
- 데이터 패칭 함수 (Query Function)
API 요청을 보내서 데이터를 가져오는 역할 (fetch, axios등)
* useQuery 반환값
- data
가져온 데이터 (데이터 패칭 함수의 반환값) - isLoading
데이터가 로딩 중일 때 true - isError
에러가 발생하면 true - error
실제 에러 객체 (error.message로 상세 에러 확인 가능)
useMutation
React Query에서 데이터를 수정(PUT), 생성(POST), 삭제(DELETE)할 때 사용되는 훅.
* useMutation 인자
- 실행할 비동기 함수 (Mutation Function)
자동 실행되지 않으며, mutate를 호출해야 실행. (fetch, axios등) - 옵션 객체
- onSuccess: 요청이 성공하면 실행되는 콜백 함수.
- queryClient : useMutation을 사용하여 데이터를 변경한 후, 최신 데이터를 UI에 반영하기 위한 함수
* useQuery 반환값
- mutate
실행할 함수 (데이터 수정 요청) - isLoading
요청이 진행 중이면 true - isError
요청이 실패하면 true - error
에러 정보 - isSuccess
요청이 성공하면 true
queryClient 함수
- invalidateQueries()
기존 데이터를 무효화하고 다시 가져오도록 트리거 (useQuery가 refetch하도록) - setQueryData()
기존 캐시 데이터를 직접 수정 - getQueryData()
현재 캐시된 데이터를 가져옴 - removeQueries()
특정 쿼리 키의 캐시 데이터를 삭제
( invalidateQueries 예시 )
const { mutate } = useMutation((updatedData) => updateUser(userId, updatedData), {
onSuccess: () => {
queryClient.invalidateQueries(['user', userId]); // 해당 유저 데이터 갱신
},
});
=> ['user', userId]라는 쿼리 키를 가진 데이터를 다시 가져오도록 트리거. ( 무효화 + 자동refetch )
https://musma.github.io/2023/09/14/react-query.html
React-query 를 사용해 상태관리를 해보자
React-query 를 사용해 상태관리를 해보자
musma.github.io
https://velog.io/@woohm402/no-global-state-manager
전역 상태 관리를 사용하지 않는 7가지 이유
props drilling 은 무조건 나쁜 걸까요?
velog.io
'React > 공부공부' 카테고리의 다른 글
[React] Styled-Components 참고 (props warning / Transient Props) (0) | 2024.09.25 |
---|---|
[React] Redux 라이브러리 (createReducer) (0) | 2024.08.30 |
[ React / ag-grid ] grid 내부에 버튼 넣기 (0) | 2024.08.21 |
[React Hook] UseMemo, UseCallback (0) | 2024.06.24 |
[React] Debounce 를 활용한 검색기능. (0) | 2024.06.22 |