Розробка фронтенду на 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
    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

Коли стандартні компоненти Бітрікса не справляються?

Ми стикалися з цим десятки разів: клієнт просить «як у Ozon», а Бітрікс видає jQuery-віджети з коробки. Вихід — React-фронтенд, який бере на себе інтерфейс, залишаючи Бітріксу бізнес-логіку та дані. В одному з проектів з каталогом 15 000 товарів час рендеру сторінки скоротився з 5 секунд до 400 мс після заміни стандартного компонента на React-віджет з віртуалізацією (react-window) та кешуванням (React Query). Досвід показує: гібридна архітектура (Бітрікс + React) дає виграш у швидкості розробки складних інтерфейсів до 40% та спрощує підтримку. Головне — правильно налаштувати інтеграцію: типізувати API, налаштувати кешування та продумати обробку помилок. Отримайте консультацію щодо вашого проекту — оцінимо його за 2 дні. Ми спеціалізуємося на React 1С-Бітрікс інтеграції з 2015 року.

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

Ми виділяємо три базових патерни впровадження. Вибір залежить від бюджету та ступеня інтеграції з поточним шаблоном.

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

Чому React швидше та зручніше?

React в 3-5 разів швидший за стандартні компоненти Бітрікса, що підтверджено нашими проектами. Причини очевидні: динамічні форми, складні фільтри, кошик без перезавантаження — на чистому Бітріксі це писати довго та боляче. React з TypeScript та React Query дають типізацію, кешування та декларативність. Помилки на бекенді (наприклад, помилка в API) не «валять» сторінку — компонент показує fallback. Якщо ваша команда вже використовує React, тягнути jQuery-код у поточній версії не має сенсу. Середня економія на розробці становить 40%. Вартість типового проекту інтеграції визначається після аналізу, але зазвичай становить $500–2000. Впровадження фронтенду на React Бітрікс дозволяє досягти високої продуктивності.

Покрокова інструкція

  1. Аудит поточного шаблону — визначаємо місця, де React дасть максимальний ефект. Зазвичай це каталог, кошик, особистий кабінет.
  2. Проектування API — створюємо REST-ендпоінти або використовуємо стандартні. В середньому потрібно 3-5 ендпоінтів на розділ. Розробка під 1С-Бітрікс з React вимагає ретельної інтеграції.
  3. Розробка компонентів — пишемо React-компоненти з TypeScript. Для управління станом використовуємо React Query з staleTime: 5 хвилин.
  4. Інтеграція — вбудовуємо віджети або перемикаємо маршрутизацію. Типовий обсяг робіт — 2-3 дні на етап.
  5. Тестування — Vitest + React Testing Library покривають 80% кейсів. Мокуємо API, перевіряємо рендер та поведінку. Для тестування React компонентів Бітрікс ми використовуємо Vitest.
  6. Деплой — збираємо бандл через Vite, розміщуємо в /local/js/build/. Налаштування кешування та CDN.

Технічна реалізація: API, авторизація, кешування

Налаштування авторизації

Бітрікс керує сесією та 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 в Бітріксі реалізується через сесію та куки.

Порівняння 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 дні та запропонуємо кошторис. Вартість типового проекту інтеграції становить від $500 до $2000 залежно від обсягу. Вартість розраховується індивідуально — після аудиту визначимо точний обсяг робіт. Досвід понад 10 років, більше 50 проектів з інтеграцією React та Бітрікс. Ми реалізуємо інтеграцію «під ключ» — типовий обсяг робіт займає 5–15 робочих днів. Зв'яжіться з нами — оцінимо проект безкоштовно.

Як React вирішує проблему повільного каталогу в Бітрікс?

Каталог на 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/ або кастомних ендпоінтів. Максимум контролю, але й максимум роботи.

  • Клієнтський роутинг через 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

Як React покращує Core Web Vitals

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

  • 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%

Чому React, а не Vue чи шаблони Бітрікса?

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

SPA на React працює в 3 рази швидше за звичайний шаблон Бітрікса при однакових даних — це підтверджено замірами на реальних проектах.

Проекти, терміни та що входить в роботу

Типові проекти, які ми вже зробили

  • Інтернет-магазин на 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 середній час завантаження скорочується з 4 секунд до 1,2, що збільшує конверсію на 25% — це додає до $1,2 млн річного доходу для магазину з оборотом $5 млн. Отримайте консультацію — ми підготуємо кейси, схожі на ваш проект.

Як ми впроваджуємо 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.

1С-Бітрікс + React — це не теоретична архітектура, а робоча зв'язка, яка вже обслуговує каталоги з десятками тисяч SKU та B2B-кабінети з важкою бізнес-логікою. Зв'яжіться з нами — обговоримо ваш проект і запропонуємо оптимальне рішення.