Коли стандартні компоненти Бітрікса не справляються?
Ми стикалися з цим десятки разів: клієнт просить «як у 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 Бітрікс дозволяє досягти високої продуктивності.
Покрокова інструкція
- Аудит поточного шаблону — визначаємо місця, де React дасть максимальний ефект. Зазвичай це каталог, кошик, особистий кабінет.
- Проектування API — створюємо REST-ендпоінти або використовуємо стандартні. В середньому потрібно 3-5 ендпоінтів на розділ. Розробка під 1С-Бітрікс з React вимагає ретельної інтеграції.
- Розробка компонентів — пишемо React-компоненти з TypeScript. Для управління станом використовуємо React Query з staleTime: 5 хвилин.
- Інтеграція — вбудовуємо віджети або перемикаємо маршрутизацію. Типовий обсяг робіт — 2-3 дні на етап.
- Тестування — Vitest + React Testing Library покривають 80% кейсів. Мокуємо API, перевіряємо рендер та поведінку. Для тестування React компонентів Бітрікс ми використовуємо Vitest.
- Деплой — збираємо бандл через 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 робочих днів. Зв'яжіться з нами — оцінимо проект безкоштовно.







