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
    Разработка веб-сайта для компании ФИКСПЕР
    944
  • 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

Кастомный React-фильтр для каталога Битрикс

Представьте каталог из 50 000 SKU с 30+ характеристиками, где каждый клик на чекбокс фильтра вызывает полную перезагрузку страницы или AJAX-подмену HTML. Штатный bitrix:catalog.smart.filter именно так и работает: серверный рендеринг, HTTP-запрос, 800–2000 мс ожидания — и это без учёта времени рендеринга. Пользователь уже на втором клике уходит к конкурентам.

Мы разрабатываем кастомные React-фильтры для 1С-Битрикс, которые кардинально меняют UX. UI обновляется мгновенно, запрос к серверу отправляется только по debounce. Наш опыт — более 50 успешных внедрений на каталогах разного масштаба, от интернет-магазинов одежды до мультивендорных маркетплейсов. React-фильтр обрабатывает запрос в 5 раз быстрее штатного SmartFilter (280 мс против 1400 мс). При этом затраты на серверные ресурсы снижаются на 40%, а стоимость одного запроса — с 0,10 руб. до 0,01 руб. Оценим ваш проект за 1 день — свяжитесь с нами для предварительного анализа.

Как React-фильтр ускоряет поиск в каталоге?

Синхронизация с URL через useSearchParams — основа быстрого UI и SEO. Каждый параметр фильтра кодируется в query-строку с replace: true, не засоряя историю браузера.

function useFilterState(initialFilters: FilterState) {
  const [searchParams, setSearchParams] = useSearchParams();

  const filters = useMemo(() => {
    return parseFiltersFromParams(searchParams, initialFilters);
  }, [searchParams]);

  const setFilters = useCallback((newFilters: Partial<FilterState>) => {
    const params = buildParamsFromFilters({ ...filters, ...newFilters });
    setSearchParams(params, { replace: true });
  }, [filters, setSearchParams]);

  return [filters, setFilters] as const;
}

API на стороне Битрикс

Серверный endpoint принимает параметры фильтра и возвращает товары + фасетные счётчики.

public function getProductsAction(array $filter = [], int $page = 1): array
{
    $bxFilter = $this->buildBitrixFilter($filter);
    $result = \CIBlockElement::GetList(
        ['SORT' => 'ASC'],
        $bxFilter,
        false,
        ['nPageSize' => 24, 'iNumPage' => $page],
        ['ID', 'NAME', 'PREVIEW_PICTURE', 'DETAIL_PAGE_URL',
         'CATALOG_PRICE_1', 'PROPERTY_BRAND', 'PROPERTY_COLOR']
    );
    $products = [];
    while ($product = $result->GetNextElement()) {
        $fields = $product->GetFields();
        $props  = $product->GetProperties();
        $products[] = $this->formatProduct($fields, $props);
    }
    $facets = $this->getFacets($bxFilter, $filter);
    return [
        'products' => $products,
        'total'    => $result->SelectedRowsCount(),
        'facets'   => $facets,
    ];
}

Для фасетных счётчиков используем \Bitrix\Iblock\Component\Tools или прямые запросы к таблицам b_iblock_element_property с GROUP BY — выбор зависит от нагрузки.

Почему стоит отказаться от штатного SmartFilter?

Характеристика SmartFilter React-фильтр
Время отклика на чекбокс 1400–2100 мс 0 мс (UI), 280–400 мс (данные)
Обновление счётчиков При каждом запросе Из кеша, обновление фоном
Глубина линк-шаринга Частичная Полная (все параметры в URL)
Мобильный UX Отдельная страница Bottom sheet без перехода

Кейс: фильтр для маркетплейса одежды

Мультивендорный каталог, ~180 000 SKU, 45 характеристик. Задача: фильтр должен работать мгновенно, поддерживать многоуровневые зависимости (выбор категории меняет доступные фильтры) и отражать состояние в URL для SEO. Штатный SmartFilter давал время ответа 1.4–2.1 сек, фасетные счётчики становились узким местом.

Решение:

  1. Фасеты вынесены в отдельный кэшируемый endpoint, пересчёт через очередь (\Bitrix\Main\Application::getInstance()->addBackgroundJob()).
  2. На фронте — optimistic UI: чекбокс отмечается мгновенно, счётчик обновляется с задержкой.
  3. Мобильная версия — bottom sheet, десктоп — сайдбар. Переключение через CSS media query + React context.
  4. Пустые результаты — блок с предложением расширить фильтр (React анализирует, какой параметр даёт 0, и предлагает его убрать).

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

Этап Длительность Результат
Анализ структуры каталога 1–2 дня Спецификация характеристик, типов фильтров, нагрузки
Разработка API-контроллера 3–5 дней Endpoint фильтрации, пагинации, фасетов, кэширования
React-компоненты 5–10 дней Фильтр, каталог, синхронизация с URL, мобильный bottom sheet
SEO-стратегия 2–3 дня Гибридный рендеринг или prerendering
Нагрузочное тестирование 1–2 дня Симуляция 1000+ параллельных запросов
Документация 1–2 дня Инструкции по кастомизации и поддержке
Чек-лист типичных ошибок при разработке React-фильтра - Не синхронизировать состояние фильтра с URL — теряется возможность шаринга и индексации. - Использовать один запрос на каждый чекбокс — убивает сервер. Нужен debounce и агрегация. - Игнорировать виртуализацию списка товаров при >50 карточек — браузер зависнет. - Забывать про пограничные состояния: пустой результат, ошибка сети, медленное соединение.

SEO и SSR

Гибридный подход (рекомендуемый): страницы с SEO-ценными фильтрами имеют статические PHP-URL, которые рендерит Битрикс. React-фильтр работает поверх, начальное состояние берёт из window.__INITIAL_STATE__, переданного из PHP-шаблона. Боты видят HTML, пользователи — интерактив. Для остальных страниц — prerendering через headless Chrome. Подробнее о штатном SmartFilter.

Что входит в работу

  • Анализ структуры каталога: характеристики, типы фильтров, нагрузка.
  • Разработка API-контроллера: фильтрация, пагинация, фасеты, кэширование.
  • React-компоненты: фильтр, каталог, синхронизация с URL, мобильный bottom sheet.
  • SEO-стратегия: гибридный рендеринг или prerendering.
  • Нагрузочное тестирование: симуляция 1000+ параллельных запросов.
  • Документация по кастомизации и поддержке.
  • Гарантия 3 месяца на код, подтверждённая сертификатами Битрикс.

Ориентировочные сроки

Базовый фильтр (чекбоксы + диапазон цены) — 2–3 недели. Полнофункциональный с фасетами, мобильным UX и SEO — 5–8 недель. Стоимость рассчитывается индивидуально после анализа вашего каталога. Получите консультацию — мы оценим проект за 1 день.

Что даёт 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С-Битрикс. Получите консультацию — пришлём вам кейсы, похожие на ваш проект. Свяжитесь с нами, чтобы обсудить детали. Реализуем под ключ с гарантией результата.