Перейти к содержимому

Язык

Меню документации

React SDK

Cookiesh в приложениях на React и Next.js: CookieshProvider, хук useConsent, компонент ConsentGate, серверный рендеринг и синхронизация согласия пользователей.

Последнее обновление: 29 октября 2026 г.

React SDK дает компонентам прямой доступ к согласию посетителя. Компоненты перерисовываются, когда выбор меняется, поэтому вам не нужно читать файлы cookie или перезагружать страницу. SDK работает с React 18 и новее, в том числе в приложениях на Next.js, Remix и Vite.

Установка

npm install @cookiesh/react

Внутри SDK использует тег script Cookiesh. Загрузите его как можно раньше, как показано в разделе Быстрый старт, а затем оберните приложение в 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>
  );
}
Свойство Тип Описание
siteId string ID вашего сайта. Необязателен, если тег script уже задает data-site-id.
userId string | undefined Связывает согласие с вошедшим пользователем, чтобы оно следовало за ним на всех устройствах. Передача undefined после выхода вызывает reset().
language string Принудительно задает язык баннера.
onChange (state: ConsentState) => void Вызывается после каждого нового выбора.

useConsent

useConsent() возвращает текущее состояние и действия для его изменения:

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

function PrivacySettingsLink() {
  const { openPreferences } = useConsent();
  return <button onClick={openPreferences}>Privacy settings</button>;
}

Возвращаемый объект содержит:

Поле Тип Описание
ready boolean false, пока состояние согласия неизвестно
necessary, preferences, analytics, marketing boolean Текущее значение каждой категории
method string Как возникло текущее состояние (см. JavaScript API)
acceptAll, rejectAll () => Promise<ConsentState> Сохраняют выбор для всех категорий
setConsent (choices) => Promise<ConsentState> Сохраняет выбор для части категорий
showBanner, openPreferences () => void Открывают интерфейс Cookiesh

ConsentGate

ConsentGate отображает дочерние элементы, только когда разрешены все перечисленные категории, а иначе — запасной вариант (fallback):

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

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

Чтобы потребовать несколько категорий, передайте массив, например category={['analytics', 'marketing']}.

Серверный рендеринг

Выбор посетителя хранится в его браузере, поэтому при рендеринге страницы на сервере он неизвестен. Во время серверного рендеринга и первого рендеринга на клиенте ready равно false, как и все категории, кроме necessary. Поэтому контент, зависящий от согласия, отображается после гидратации, и ничего не запускается до согласия.

Чтобы избежать смещения макета, задайте для ConsentGate запасной вариант того же размера, что и заменяемый контент. В Next.js App Router компоненты, которые вызывают useConsent(), должны быть клиентскими ('use client').

Тестирование

В модульных тестах оборачивайте компоненты в CookieshTestProvider, чтобы управлять состоянием без загрузки скрипта:

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

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