RTK Query

RTK Query es la potente capa de obtención y almacenamiento en caché de datos de Redux Toolkit. Elimina la necesidad de escribir creadores de acciones asíncronas y gestiona automáticamente los estados de carga, el caché y la sincronización de datos.

Configuración base del cliente

Todos los endpoints de RTK Query se extienden desde una única instancia base del cliente.

Configuración de la 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, // p. ej., https://api.decentraland.org
  
  prepareHeaders: (headers, { getState }) => {
    const state = getState() as RootState;
    
    // Añadir token de autenticación
    const token = state.user.session?.authToken;
    if (token) {
      headers.set('authorization', `Bearer ${token}`);
    }
    
    // Añadir chain ID para el contexto web3
    const chainId = state.user.chainId;
    if (chainId) {
      headers.set('x-chain-id', String(chainId));
    }
    
    // Encabezados estándar
    headers.set('accept', 'application/json');
    headers.set('content-type', 'application/json');
    
    return headers;
  },
  
  credentials: 'omit', // o 'include' si el backend requiere cookies
});

Instancia del Cliente

Convenciones de Tags

Los tags se usan para la invalidación y sincronización del caché. Sigue estas convenciones:

Nomenclatura de Tags

Tipo de recurso
Tags de Query
Mutación invalida

Colecciones

'Parcels' (plural)

'Parcels'

Entidad individual

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

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

Lista + Detalle

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

['Parcels'] o id específico

Ejemplos de Tags

Creando Endpoints

Los endpoints DEBERÍAN ubicarse junto con su feature en feature.client.ts archivos.

Endpoint de Query (Lectura)

Endpoint de Mutación (Escritura)

Actualizaciones Optimistas

Usa onQueryStarted para actualizaciones optimistas de UI con reversión automática en caso de fallo.

Opciones avanzadas de Query

Polling

Omitir Query

Query perezosa

Transformar Respuesta

Serialización Personalizada

Para paginación o búsqueda, personaliza la serialización de la clave de caché:

Manejo de errores

Manejo de Errores Personalizado

Uso en componentes:

Gestión del Caché

Actualizaciones manuales del caché

Invalidar Caché

Restablecer el estado del cliente

Prefetch de Datos

Buenas prácticas

1. Usar nombres descriptivos para los endpoints

2. Proveer tags comprehensivos

3. Manejar estados de carga y error

4. Usar Type Guards

Siguientes pasos

Última actualización