RTK Query
RTK Query는 Redux Toolkit의 강력한 데이터 가져오기 및 캐싱 계층입니다. 비동기 액션 생성기를 작성할 필요를 없애 주며, 로딩 상태, 캐싱, 데이터 동기화를 자동으로 관리합니다.
기본 클라이언트 구성
모든 RTK Query 엔드포인트는 단일 기본 클라이언트 인스턴스에서 확장됩니다.
기본 쿼리 설정
// src/services/baseQuery.ts
import { fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import type { RootState } from '@/app/store';
export const baseQuery = fetchBaseQuery({
baseUrl: process.env.NEXT_PUBLIC_API_URL, // 예: https://api.decentraland.org
prepareHeaders: (headers, { getState }) => {
const state = getState() as RootState;
// 인증 토큰 추가
const token = state.user.session?.authToken;
if (token) {
headers.set('authorization', `Bearer ${token}`);
}
// web3 컨텍스트용 체인 ID 추가
const chainId = state.user.chainId;
if (chainId) {
headers.set('x-chain-id', String(chainId));
}
// 표준 헤더
headers.set('accept', 'application/json');
headers.set('content-type', 'application/json');
return headers;
},
credentials: 'omit', // 백엔드가 쿠키를 필요로 하면 'include'
});클라이언트 인스턴스
태그 규칙
태그는 캐시 무효화와 동기화에 사용됩니다. 다음 규칙을 따르세요:
태그 명명
리소스 유형
쿼리 태그
뮤테이션 무효화 대상
컬렉션
'Parcels' (복수형)
'Parcels'
단일 엔티티
{type: 'Parcels', id: '123'}
{type: 'Parcels', id: '123'}
목록 + 상세
['Parcels', {type: 'Parcels', id}]
['Parcels'] 또는 특정 id
태그 예시
엔드포인트 생성
엔드포인트는 다음 위치의 기능과 함께 배치하는 것이 좋습니다 feature.client.ts 파일.
쿼리 엔드포인트(읽기)
뮤테이션 엔드포인트(쓰기)
낙관적 업데이트
사용 onQueryStarted 실패 시 자동 롤백되는 낙관적 UI 업데이트용.
고급 쿼리 옵션
폴링
쿼리 건너뛰기
지연 쿼리
응답 변환
사용자 정의 직렬화
페이지네이션이나 검색의 경우 캐시 키 직렬화를 사용자 지정하세요:
오류 처리
사용자 정의 오류 처리
컴포넌트에서의 사용법:
캐시 관리
수동 캐시 업데이트
캐시 무효화
클라이언트 상태 초기화
데이터 사전 가져오기
모범 사례
1. 설명적인 엔드포인트 이름 사용
2. 포괄적인 태그 제공
3. 로딩 및 오류 상태 처리
4. 타입 가드 사용
다음 단계
마지막 업데이트