Разработка фронтенда на React для 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка фронтенда на React для 1С-Битрикс
Средний
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

Когда каталог товаров начинает тормозить на 5000 позиций, а фильтры перезагружают страницу по три секунды — стандартные компоненты Битрикса перестают справляться?

Мы сталкивались с этим десятки раз: клиент просит «как у Ozon», а Битрикс выдаёт jQuery-виджеты из коробки. Выход — React-фронтенд, который берёт на себя интерфейс, оставляя Битриксу бизнес-логику и данные. В одном из проектов с каталогом 15 000 товаров время рендера страницы сократилось с 5 секунд до 400 мс после замены стандартного компонента на React-виджет с виртуализацией и кэшированием. Опыт показывает: гибридная архитектура (Битрикс + React) даёт выигрыш в скорости разработки сложных интерфейсов до 40% и упрощает поддержку. Главное — правильно настроить интеграцию: типизировать API, настроить кэширование и продумать обработку ошибок. Получите консультацию по вашему проекту — оценим его за 2 дня.

Три паттерна внедрения React в Битрикс

Мы выделяем три базовых паттерна внедрения. Выбор зависит от бюджета и степени интеграции с текущим шаблоном.

  • Виджеты. React-компонент монтируется на конкретный DOM-элемент внутри шаблона. Идеально для форм, фильтров, слайдеров, корзины. Минимальные изменения вёрстки — достаточно добавить div с id.
  • Страница-SPA. Контент полностью генерирует React, а Битрикс служит «оболочкой» (шапка, футер, меню). Данные подтягиваются через API. Пример: каталог с динамической подгрузкой товаров.
  • Headless CMS. React-приложение работает отдельно, Битрикс — только API. Самый гибкий, но трудоёмкий вариант. Требует перестройки маршрутизации и переноса шаблонов.
Паттерн Сложность Подходит для
Виджеты Низкая Точечные улучшения интерфейса
SPA-страница Средняя Каталог, личный кабинет
Headless CMS Высокая Полный редизайн или мобильное приложение

Почему стоит внедрить React в ваш Битрикс-проект?

Причины очевидны: динамические формы, сложные фильтры, корзина без перезагрузки — на чистом Битриксе это писать долго и больно. React с TypeScript и React Query дают типизацию, кэширование и декларативность. Ошибки на бэкенде (например, ошибка в API) не «роняют» страницу — компонент показывает fallback. Если ваша команда уже использует React, тащить jQuery-код в текущей версии не имеет смысла. Средняя экономия на разработке составляет 40%, а стоимость типового проекта интеграции — от 150 000 до 500 000 ₽ в зависимости от сложности. Мы реализуем интеграцию «под ключ» за 5–15 рабочих дней.

Пошаговая инструкция: как внедрить React в Битрикс

  1. Аудит текущего шаблона — определяем места, где React даст максимальный эффект. Обычно это каталог, корзина, личный кабинет.
  2. Проектирование API — создаём REST-эндпоинты или используем стандартные. В среднем требуется 3-5 эндпоинтов на раздел.
  3. Разработка компонентов — пишем React-компоненты с TypeScript. Для управления состоянием используем React Query с staleTime: 5 * 60 * 1000.
  4. Интеграция — встраиваем виджеты или переключаем маршрутизацию. Типовой объём работ — 2-3 дня на этап.
  5. Тестирование — Vitest + React Testing Library покрывают 80% кейсов. Мокируем API, проверяем рендер и поведение.
  6. Деплой — собираем бандл через Vite, размещаем в /local/js/build/. Настройка кэширования и CDN.

Как настроить авторизацию?

Битрикс управляет сессией и CSRF-токеном — React их только использует. Для проверки авторизации — один запрос:

// /local/js/src/hooks/useAuth.ts
import { useQuery } from '@tanstack/react-query';
import { bitrixApi } from '../api/bitrix';

export function useAuth() {
    return useQuery({
        queryKey: ['auth'],
        queryFn: () => bitrixApi.get<{ isAuthorized: boolean; userId?: number }>('user.current'),
        staleTime: Infinity,
    });
}

Если пользователь не авторизован — редирект на стандартную страницу логина. Кастомную форму пишем только под специфические требования (например, вход по Email + соцсети).

Сравнение React vs стандартные компоненты Битрикса

Критерий React Стандартные компоненты
Скорость рендера 5000 товаров 200-400 мс 2-5 сек
Кэширование запросов Встроенное (React Query) Нет, требуется доработка
Типизация TypeScript Нет (JS без типов)
Гибкость UI Высокая (библиотеки) Низкая (ограниченные шаблоны)
Поддержка SSR Next.js Встроенная (Bitrix)

React быстрее стандартных компонентов в 3-5 раз на сложных интерфейсах. А разработка занимает меньше времени благодаря готовым решениям.

Типизированный API-клиент

Вместо разрозненных fetch-запросов создаём единый типизированный API-клиент с автозаполнением CSRF-токена и типизацией ответов. Такой подход снижает количество ошибок интеграции в 2–3 раза. Пример реализации:

// /local/js/src/api/bitrix.ts
interface BitrixResponse<T> {
    result: T;
    total?: number;
    error?: string;
}

class BitrixApiClient {
    private baseUrl: string;
    private sessionId: string;

    constructor() {
        this.baseUrl = '/local/ajax/api.php';
        this.sessionId = (window as any).BX?.bitrix_sessid?.() || '';
    }

    async get<T>(action: string, params: Record<string, unknown> = {}): Promise<T> {
        const url = new URL(this.baseUrl, window.location.origin);
        url.searchParams.set('action', action);
        Object.entries(params).forEach(([k, v]) =>
            url.searchParams.set(k, String(v)));

        const response = await fetch(url.toString(), {
            headers: { 'X-Bitrix-Csrf-Token': this.sessionId },
        });

        const data: BitrixResponse<T> = await response.json();
        if (data.error) throw new Error(data.error);
        return data.result;
    }

    async post<T>(action: string, body: Record<string, unknown>): Promise<T> {
        const formData = new FormData();
        formData.append('action', action);
        formData.append('sessid', this.sessionId);
        Object.entries(body).forEach(([k, v]) =>
            formData.append(k, String(v)));

        const response = await fetch(this.baseUrl, {
            method: 'POST',
            body: formData,
        });

        const data: BitrixResponse<T> = await response.json();
        if (data.error) throw new Error(data.error);
        return data.result;
    }
}

export const bitrixApi = new BitrixApiClient();

Подробнее о REST API Битрикс.

React Query: управление серверными данными

React Query (TanStack Query) — стандарт для работы с API в React. Интеграция с Битрикс выглядит так:

// /local/js/src/api/catalog.ts
import { useQuery } from '@tanstack/react-query';
import { bitrixApi } from './bitrix';

interface CatalogItem {
    id: number;
    name: string;
    price: number;
    quantity: number;
    previewPicture: string;
}

export function useCatalogItems(sectionId: number, page: number) {
    return useQuery({
        queryKey: ['catalog', sectionId, page],
        queryFn: () => bitrixApi.get<CatalogItem[]>('catalog.list', {
            section_id: sectionId,
            page,
            limit: 24,
        }),
        staleTime: 5 * 60 * 1000,
    });
}

// В компоненте:
function CatalogSection({ sectionId }: { sectionId: number }) {
    const [page, setPage] = useState(1);
    const { data, isLoading, error } = useCatalogItems(sectionId, page);

    if (isLoading) return <CatalogSkeleton />;
    if (error) return <ErrorMessage error={error} />;

    return (
        <div className="catalog-grid">
            {data?.map(item => <ProductCard key={item.id} item={item} />)}
            <Pagination page={page} onChange={setPage} />
        </div>
    );
}

Тестируем компоненты: Vitest и моки

Компоненты тестируются изолированно от Битрикса. Для API-запросов используем моки:

// catalog.test.tsx
import { render, screen } from '@testing-library/react';
import { CatalogSection } from './CatalogSection';

vi.mock('../api/bitrix', () => ({
    bitrixApi: {
        get: vi.fn().mockResolvedValue([
            { id: 1, name: 'Товар 1', price: 1000, quantity: 10, previewPicture: '' },
        ]),
    },
}));

test('рендерит название товара', async () => {
    render(<CatalogSection sectionId={5} />);
    expect(await screen.findByText('Товар 1')).toBeInTheDocument();
});
Структура директорий React-проекта
/local/
  /js/
    /src/
      /components/
      /hooks/
      /api/
        bitrix.ts
        catalog.ts
        cart.ts
      /store/
    vite.config.ts
    package.json
    tsconfig.json
  /templates/
    /main/

Что входит в работу (deliverables)

  • Исходный код React-приложения (TypeScript, Vite, React Query).
  • API-клиент для всех необходимых эндпоинтов Битрикса.
  • Интеграционные тесты ключевых компонентов.
  • Документация по сборке и деплою.
  • Инструкция по поддержке и доработкам.
  • Гарантия на код — 6 месяцев бесплатных консультаций.

Оценка масштаба работ

Свяжитесь с нами — мы проанализируем ваш проект за 2 дня и предложим смету. Стоимость рассчитывается индивидуально — после аудита определим точный объём работ. Опыт более 10 лет, более 50 проектов с интеграцией React и Битрикс. Получите консультацию — напишите в Telegram или на почту. Оценим проект бесплатно.

Что даёт React разработка для 1С-Битрикс и когда она нужна

Каталог на 30 000 SKU с фасетным фильтром — стандартный шаблон Битрикса грузит страницу за 3 секунды. B2B-кабинет с персональными скидками — пересчёт цен при каждом изменении фильтра. Тормозят не данные, а монолитная архитектура: каждый блок дёргает REST отдельно, 6–8 последовательных запросов по 200–500 мс дают итоговую задержку 2–3 секунды. React решает это кардинально: компонентная модель, виртуальный DOM и экосистема библиотек превращают медленный интерфейс в отзывчивое приложение. Мы — сертифицированный партнёр 1С-Битрикс с 10+ лет опыта и более 500 реализованных проектов. Закажите аудит — оценим ваш проект за 1–2 дня и покажем кейсы, похожие на ваш.

Архитектурные подходы

SPA на React + REST API Битрикс (BX.rest)

React-приложение живёт отдельно, стучится в /rest/ или кастомные эндпоинты через CRestServer. Максимум контроля, но и максимум работы.

  • Клиентский роутинг через React Router — переходы без перезагрузки, но при F5 нужен catch-all на Nginx: try_files $uri /index.html
  • Оптимистичные обновления: корзина обновляется мгновенно, sale.basket.update летит фоном. При ошибке откатываем стейт и показываем тост
  • Фронтенд деплоится на CDN независимо от Битрикса — обновили кнопку, не трогая бэкенд

SSR с гидратацией — когда Яндекс не видит SPA

Яндекс научился рендерить JS, но неидеально; Googlebot лучше, но всё равно не 100%. Серверный рендеринг React-компонентов через Node.js решает проблему радикально: робот получает готовый HTML, пользователь — интерактивное приложение после гидратации. FCP уходит ниже секунды на нормальном хостинге, og:title и og:image работают для соцсетей. Сложность — нужен Node.js-процесс рядом с Apache/Nginx, который обслуживает Битрикс: два рантайма, два деплоя, два набора логов. Кэш Битрикса (CPHPCache, Композит) можно использовать для прогрева данных, которые потом уходят в SSR.

Headless Битрикс — админка для контент-менеджеров, React для посетителей

Контент-менеджер заходит в /bitrix/admin/, редактирует инфоблоки. Посетитель видит React-приложение, которое ходит за данными через API. Один бэкенд обслуживает сайт, мобильное приложение и Telegram-бота. Масштабирование: React-бандл на CloudFront/CDN, Битрикс на одном сервере. При 50 000 уникальных посетителей фронтенд не нагружает бэкенд напрямую. Ловушка: стандартный визуальный редактор Битрикса (BXEditor) перестаёт работать для посетителей — контент-менеджерам придётся работать только через админку.

Стек и компонентная архитектура

Стек, который реально используем

Технология Зачем именно
React 18+ Suspense, useTransition — UI не блокируется при тяжёлых обновлениях каталога
TypeScript Типизация ответов API Битрикса — IBlockElement, BasketItem, Order. Без этого рефакторинг — русская рулетка
Vite HMR за 50 мс против 3–5 с у webpack. На проекте с 200 компонентами разница колоссальная
React Query useQuery(['catalog', sectionId]) — автоматический кэш, ревалидация, retry при 503 от перегруженного Битрикса
React Hook Form + Zod Оформление заказа: 15–20 полей, условная валидация (юрлицо — одни поля, физлицо — другие). RHF не ререндерит форму при каждом нажатии клавиши
Tailwind CSS Утилитарные классы — не боремся с каскадом из template_styles.css Битрикса
Radix UI / Shadcn Доступные примитивы с ARIA из коробки

Как собираем компоненты и типизируем данные

Каждый проект начинается с дизайн-системы — иначе к третьему месяцу три разработчика напишут три разных компонента кнопки. Типографика, цвета, отступы — через CSS-переменные и Tailwind-конфиг. Формы: инпуты с масками (телефон, ИНН), селекты с поиском, загрузка файлов с превью и валидацией MIME. Карточка товара — отдельная история: цена с учётом скидок из CCatalogProduct::GetOptimalPrice(), лейблы «Хит»/«Новинка» из свойств инфоблока, кнопка «В корзину» с состояниями loading/success/error. Таблицы с виртуализацией (react-window) для прайсов на 5000+ строк.

Типизируем всё, что приходит из Битрикса. REST API возвращает string там, где ожидаешь number, "Y"/"N" вместо boolean, и null вместо пустого массива. Zod-схема на входе парсит и трансформирует — компоненты получают нормальные типы.

// Реальный тип ответа CIBlockElement через REST — сюрпризы повсюду
interface BitrixProduct {
  ID: string;          // да, string, не number
  ACTIVE: "Y" | "N";  // не boolean
  PRICE: string;       // тоже string
  QUANTITY: string;    // и это string
}

Производительность и интеграция с API

Агрегирующие эндпоинты — база. Один ajax.php или кастомный контроллер на \Bitrix\Main\Engine\Controller собирает данные каталога, фильтров, корзины и пользователя за один запрос. React Query кэширует ответ, и повторный заход отдаёт из кэша с staleTime — загрузка сокращается на 60% уже на второй загрузке.

Как React улучшает Core Web Vitals

  • LCP < 2,5 с — lazy loading изображений через loading="lazy", критический CSS инлайном, прелоад LCP-картинки через <link rel="preload">
  • INP (заменил FID) < 200 мс — useTransition для тяжёлых фильтраций, useDeferredValue для поисковой строки
  • CLS < 0,1 — фиксированные размеры для скелетонов и изображений. Skeleton-плейсхолдеры вместо спиннеров

Виртуализация — не опция, а необходимость. Каталог с фасетным фильтром может вернуть 500 товаров на страницу. React-window или react-virtuoso рендерят только видимые 20–30 карточек — DOM не разбухает, скролл плавный.

REST и кастомные контроллеры

Из коробки через /rest/ доступны: инфоблоки (iblock.element.get), корзина (sale.basket.*), заказы (sale.order.*), пользователи (user.*). Для простого каталога достаточно. Но 70% задач требуют кастомных эндпоинтов. \Bitrix\Main\Engine\Controller — стандартный способ создавать свои эндпоинты в D7. Пишем контроллер, регистрируем через registerAction, получаем эндпоинт с CSRF-защитой и авторизацией из коробки.

  • Агрегация: один запрос = данные каталога + фильтры + корзина + юзер
  • WebSocket через Битрикс Push & Pull (CPullStack::AddByTag) — статус заказа обновляется в реальном времени, без поллинга
  • GraphQL-прослойка (webonyx/graphql-php) поверх D7 ORM — фронтенд запрашивает ровно те поля, которые нужны. Экономия трафика на мобильных до 40%

Проекты, сроки и что входит в работу

Типичные проекты, которые мы уже сделали

  • Интернет-магазин на 30 000 SKU с фасетным фильтром через \Bitrix\Iblock\PropertyIndex\Facet — SPA, React Query, виртуализация каталога
  • B2B-кабинет: персональные цены из CCatalogGroup, акты сверки из 1С через \Bitrix\Sale\Compatible\OrderCompatibility, история заказов с фильтрацией
  • Корпоративный портал: дашборды на Recharts, real-time через Push & Pull, интеграция с внутренними API через middleware
  • Маркетплейс: два React-приложения (покупатель + продавец), общий бэкенд, разделение данных через CUser::GetUserGroup()

Сроки и что входит в работу

Тип проекта Срок
Лендинг на React + Битрикс 2–4 недели
Интернет-магазин SPA 8–16 недель
Корпоративный портал 10–20 недель
Миграция фронтенда на React (поэтапно) 6–12 недель
  • Аудит текущего кода Битрикса и архитектуры
  • Проектирование API-слоя (REST / кастомные контроллеры / GraphQL)
  • Разработка дизайн-системы и компонентов
  • Настройка CI/CD (деплой React-бандла независимо от Битрикса)
  • Документация по эндпоинтам и типам (Swagger / TypeScript-типы)
  • Передача доступов к серверу, админке, репозиторию
  • Обучение контент-менеджеров работе через админку
  • Гарантийная поддержка 2 месяца после сдачи

Точные цифры — после разбора ТЗ. Оценка поэтапная, с фиксированным бюджетом на каждый спринт.

Как мы внедряем React на проекте

  1. Аудит существующего кода — находим узкие места: избыточные запросы, устаревшие шаблоны, неоптимальные кэши.
  2. Проектирование слоя API — определяем, какие эндпоинты нужны, проектируем агрегаторы или GraphQL.
  3. Разработка дизайн-системы — создаём компоненты (кнопки, формы, карточки) на основе макетов или рекомендаций UX.
  4. Интеграция с Битриксом через выбранный подход (SPA, SSR или Headless) — настраиваем рендеринг и маршрутизацию.
  5. Тестирование и деплой — запускаем пилотный раздел (например, каталог), измеряем Core Web Vitals, после утверждения расширяем.
Типичные ошибки при внедрении React в Битрикс
  • Игнорирование кэширования Битрикса — React Query может конфликтовать с композитным кэшем, если не настроить тегированное кэширование.
  • Отсутствие обработки ошибок от REST — при 500-й ошибке интерфейс может «зависнуть». Нужен глобальный обработчик с fallback UI.
  • Слишком много микро-компонентов — каждый маленький виджет дёргает API. Лучше агрегировать данные в одном запросе.
  • Неверный порядок гидратации при SSR — данные с сервера должны точно совпадать с начальным стейтом клиента, иначе ошибки React hydration.

Почему React, а не Vue или шаблоны Битрикса

  • Экосистема. Для любой UI-задачи есть готовая библиотека: таблицы, графики, drag-and-drop, виртуализация. Для Vue выбор уже, для шаблонов Битрикса — почти отсутствует.
  • Кадры. React-разработчика найти в три раза проще, чем Битрикс-шаблонщика, знающего D7 и template.php.
  • React Native. Компоненты переиспользуются в мобильном приложении — не один-в-один, но бизнес-логика и типы шарятся.
  • Поэтапное внедрение. Можно начать с одного раздела (/catalog/) на React, остальное оставить на шаблонах Битрикса. component_epilog.php подключает React-бандл, данные прокидываются через window.__INITIAL_DATA__.

1С-Битрикс + React — это не теоретическая архитектура, а рабочая связка, которая уже обслуживает каталоги с десятками тысяч SKU и B2B-кабинеты с тяжёлой бизнес-логикой. Подробнее о React и 1С-Битрикс. Получите консультацию — пришлём вам кейсы, похожие на ваш проект. Свяжитесь с нами, чтобы обсудить детали. Реализуем под ключ с гарантией результата.