Документация Fitting Widget

React

Интеграция с React-приложением (Vite / CRA)

Интеграция с React

Работает с любым React-окружением — Vite, Create React App или своим решением.

1. Загрузка скрипта виджета

Добавьте скрипт в ваш index.html:

<!-- В public/index.html или index.html (Vite) -->
<script
  src="https://widget.try-on.ru/fitting-widget-bundle.js"
  id="fitting-widget-bundle"
></script>
<script id="fitting-init">
  window.fitting = window.fitting || function() {
    (window.fitting.q = window.fitting.q || []).push(arguments);
  };
  window.fitting('init', {
    apiKey: '%VITE_TRY_ON_API_KEY%'
  });
</script>
Замените %VITE_TRY_ON_API_KEY% на ваш реальный ключ во время сборки, или используйте инъекцию во время выполнения.

2. Создайте свой хук

// hooks/useFittingWidget.ts
interface TryonItem {
  productName: string;
  url: string;
  productId?: string;
}

interface CreateOptions {
  targetElementId: string;
  model?: 'balanced' | 'quality' | 'speed';
  tryonItems: TryonItem[];
}

declare global {
  interface Window {
    fitting: (command: string, options?: unknown) => void;
  }
}

export function useFittingWidget() {
  const open = (options: CreateOptions) => {
    window.fitting('create', options);
  };

  const close = () => {
    window.fitting('close');
  };

  return { open, close };
}

3. Использование в компоненте

// components/TryOnWidget.tsx
import { useFittingWidget } from '../hooks/useFittingWidget';

interface Props {
  productName: string;
  imageUrl: string;
}

export function TryOnWidget({ productName, imageUrl }: Props) {
  const { open } = useFittingWidget();

  return (
    <div>
      <div
        id="widget-container"
        style={{ width: '100%', maxWidth: 600, aspectRatio: '3/4' }}
      />
      <button
        onClick={() =>
          open({
            targetElementId: 'widget-container',
            model: 'balanced',
            tryonItems: [{ productName, url: imageUrl }],
          })
        }
      >
        Примерка
      </button>
    </div>
  );
}