RTK Query

RTK Query é a poderosa camada de busca e cache de dados do Redux Toolkit. Elimina a necessidade de escrever action creators assíncronos e gerencia estados de carregamento, cache e sincronização de dados automaticamente.

Configuração básica do Client

Todos os endpoints do RTK Query estendem a partir de uma única instância base do client.

Configuração do Base 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, // ex., https://api.decentraland.org
  
  prepareHeaders: (headers, { getState }) => {
    const state = getState() as RootState;
    
    // Adicionar token de autenticação
    const token = state.user.session?.authToken;
    if (token) {
      headers.set('authorization', `Bearer ${token}`);
    }
    
    // Adicionar chain ID para contexto web3
    const chainId = state.user.chainId;
    if (chainId) {
      headers.set('x-chain-id', String(chainId));
    }
    
    // Headers padrão
    headers.set('accept', 'application/json');
    headers.set('content-type', 'application/json');
    
    return headers;
  },
  
  credentials: 'omit', // ou 'include' se o backend exigir cookies
});

Instância do Client

Convenções de Tags

Tags são usadas para invalidação de cache e sincronização. Siga estas convenções:

Nomeação de Tag

Tipo de Recurso
Tags de Query
Mutação Invalida

Coleções

'Parcels' (plural)

'Parcels'

Entidade única

{type: 'Parcels', id: '123'}

{type: 'Parcels', id: '123'}

Lista + Detalhe

['Parcels', {type: 'Parcels', id}]

['Parcels'] ou id específico

Exemplos de Tags

Criando Endpoints

Endpoints DEVERIAM ficar co-localizados com sua feature em feature.client.ts arquivos.

Endpoint de Query (Leitura)

Endpoint de Mutation (Escrita)

Atualizações Otimistas

Use onQueryStarted para atualizações otimistas de UI com rollback automático em caso de falha.

Opções Avançadas de Query

Polling

Pular Query

Query Preguiçosa

Transformar Response

Serialização Customizada

Para paginação ou busca, personalize a serialização da chave de cache:

Tratamento de Erros

Tratamento de Erro Customizado

Uso em componentes:

Gerenciamento de Cache

Atualizações manuais de cache

Invalidar Cache

Resetar Estado do Client

Prefetch de Dados

Boas Práticas

1. Use nomes de endpoint descritivos

2. Forneça Tags abrangentes

3. Trate estados de carregamento e erro

4. Use Type Guards

Próximos Passos

Atualizado