Saltar al contenido

Idioma

Menú de la documentación

SDK de React

Usa Cookiesh en React y Next.js: CookieshProvider, el hook useConsent, el componente ConsentGate, el renderizado en servidor y la sincronización de usuarios.

Última actualización: 29 de octubre de 2026

El SDK de React da a los componentes acceso directo al consentimiento del visitante. Los componentes se vuelven a renderizar cuando cambia la elección, así que nunca tienes que leer cookies ni recargar la página. Funciona con React 18 y posteriores, incluidas las apps de Next.js, Remix y Vite.

Instalación

npm install @cookiesh/react

El SDK usa internamente la etiqueta script de Cookiesh. Cárgala lo antes posible, como se explica en el inicio rápido, y después envuelve tu app en CookieshProvider.

CookieshProvider

import { CookieshProvider } from '@cookiesh/react';

export function App({ children }: { children: React.ReactNode }) {
  return (
    <CookieshProvider siteId="ck_live_8f2a91" userId={session?.user.id}>
      {children}
    </CookieshProvider>
  );
}
Prop Tipo Descripción
siteId string Tu Site ID. Opcional si la etiqueta script ya define data-site-id.
userId string | undefined Vincula el consentimiento a un usuario con sesión iniciada para que lo acompañe en todos sus dispositivos. Pasar undefined tras cerrar sesión llama a reset().
language string Fuerza el idioma del banner.
onChange (state: ConsentState) => void Se llama tras cada nueva elección.

useConsent

useConsent() devuelve el estado actual y las acciones para cambiarlo:

import { useConsent } from '@cookiesh/react';

function PrivacySettingsLink() {
  const { openPreferences } = useConsent();
  return <button onClick={openPreferences}>Configuración de privacidad</button>;
}

El objeto devuelto contiene:

Campo Tipo Descripción
ready boolean false hasta que se conoce el estado del consentimiento
necessary, preferences, analytics, marketing boolean El valor actual de cada categoría
method string Cómo se ha llegado al estado actual (consulta la API de JavaScript)
acceptAll, rejectAll () => Promise<ConsentState> Guardan una elección para todas las categorías
setConsent (choices) => Promise<ConsentState> Guarda una elección para algunas categorías
showBanner, openPreferences () => void Abren la interfaz de Cookiesh

ConsentGate

ConsentGate solo renderiza su contenido cuando todas las categorías indicadas están permitidas; si no, muestra un contenido alternativo:

import { ConsentGate } from '@cookiesh/react';

<ConsentGate category="marketing" fallback={<VideoPlaceholder />}>
  <YouTubeEmbed id="dQw4w9WgXcQ" />
</ConsentGate>

Pasa un array, como category={['analytics', 'marketing']}, para exigir varias categorías.

Renderizado en servidor

La elección del visitante vive en su navegador, así que se desconoce mientras la página se renderiza en el servidor. Durante el renderizado en servidor y el primer renderizado en el cliente, ready es false y todas las categorías salvo necessary son false. Por eso, el contenido que depende del consentimiento se renderiza tras la hidratación y nada se ejecuta antes del consentimiento.

Para evitar cambios de diseño, da a ConsentGate un fallback del mismo tamaño que el contenido al que sustituye. En el App Router de Next.js, los componentes que llaman a useConsent() deben ser componentes de cliente ('use client').

Pruebas

En las pruebas unitarias, envuelve los componentes en CookieshTestProvider para controlar el estado sin cargar el script:

import { render, screen } from '@testing-library/react';
import { CookieshTestProvider } from '@cookiesh/react/testing';

render(
  <CookieshTestProvider consent={{ analytics: true, marketing: false }}>
    <Dashboard />
  </CookieshTestProvider>,
);