Розробка кастомних компонентів Retool під ключ

Часто стикаємося з ситуацією, коли вбудовані віджети Retool не справляються: потрібно відобразити 10k+ точок на карті з динамічною кластеризацією, а штатний Map-віджет гальмує вже на 500 точках. Або потрібна діаграма з нестандартною анімацією, drag-and-drop сортування з бізнес-правилами, Kanban-дошк

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка кастомних компонентів Retool під ключ
Середній
~3-5 днів

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1288
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    984
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    988
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1001

Часто стикаємося з ситуацією, коли вбудовані віджети Retool не справляються: потрібно відобразити 10k+ точок на карті з динамічною кластеризацією, а штатний Map-віджет гальмує вже на 500 точках. Або потрібна діаграма з нестандартною анімацією, drag-and-drop сортування з бізнес-правилами, Kanban-дошка з обмеженням WIP. Для таких завдань Retool надає механізм Custom Components — повноцінні React-застосунки, ізольовані в iframe та пов'язані з хостом через postMessage API. Ми побудували понад 50 таких компонентів під ключ для різних бізнес-задач, і накопичили практику, якою ділимося.

Як працюють кастомні компоненти? — розробка кастомних компонентів

Custom Component — це React-застосунок, який спілкується з Retool через бібліотеку @tryretool/custom-component-support. Вона надає React-хуки для синхронізації стану: Retool.useStateValue для читання/запису моделі та Retool.useEventCallback для відправки подій назад до Retool. Середовище розробки — локальний сервер (Vite або CRA), а готова збірка деплоїться на будь-який статичний хостинг.

// src/index.tsx — точка входу кастомного компонента import { Retool } from '@tryretool/custom-component-support'; interface ModelData { items: Array<{ id: string; label: string; value: number; color: string }>; selectedId: string | null; } export const BubbleChart: FC = () => { const [items] = Retool.useStateValue<ModelData['items']>({ name: 'items', initialValue: [], label: 'Chart items', inspector: 'array', }); const [selectedId, setSelectedId] = Retool.useStateValue<string | null>({ name: 'selectedId', initialValue: null, label: 'Selected item ID', inspector: 'string', }); const onSelect = Retool.useEventCallback({ name: 'onItemSelect' }); const handleBubbleClick = (id: string) => { setSelectedId(id); onSelect({ id }); }; return ( <BubbleChartRenderer items={items} selectedId={selectedId} onSelect={onSelect} /> ); }; 

Чому custom components краще вбудованих віджетів?

Вбудовані віджети покривають 80% типових завдань, але для 20% потрібне кастомне рішення. Порівняйте:

Критерій Вбудовані віджети Кастомні компоненти
Візуалізація Стандартні графіки (бар, лінія, пай) Будь-які: D3.js, Three.js, ECharts
Інтерактивність Базова (фільтри, сортування) Кастомні події, drag-and-drop, анімації
Продуктивність Обмежена 1–2 тис. рядків Віртуалізація до 50k+ рядків
Гнучкість Задані властивості Повний контроль над рендером і логікою

Для рідкісних форматів (chord diagram, force-directed graph) кастомний компонент — єдиний спосіб.

Типові завдання

Візуалізації: D3.js-графіки (chord diagram, force-directed graph, sankey), ECharts з кастомними серіями, Three.js-попередній перегляд 3D-моделей.

Інтерактивні таблиці: віртуалізовані списки через @tanstack/virtual для 50k+ рядків, inline-редагування з кастомними валідаторами, drag-and-drop сортування через @dnd-kit/core.

Карти: Mapbox GL JS / Leaflet з динамічними кластерами, drawing-інструменти для геозон, ізохрони через Mapbox Isochrone API.

Специфічні UI-патерни: Kanban-дошка з бізнес-обмеженнями, часова шкала Gantt, code editor на базі Monaco.

Що входить в роботу?

Ми розробляємо компонент під ключ: від проектування data contract до деплою та документації. В рамках задачі:

  • Узгодження моделі даних і подій.
  • Реалізація рендеру та всієї бізнес-логіки.
  • Інтеграція з вашим Retool-оточенням (cloud або self-hosted).
  • Оптимізація продуктивності (віртуалізація, lazy loading, мемоізація).
  • Деплой на CDN або в Retool Toolbox.
  • Документація з встановлення та використання.
  • Навчання та письмова підтримка протягом 2 тижнів після здачі.

Збірка та деплой

Компонент збирається в єдиний бандл і деплоїться на статику. Retool підтримує два способи підключення: через URL (CDN/S3/Vercel) та через Retool Toolbox для self-hosted інстансів.

// vite.config.ts import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], build: { lib: { entry: 'src/index.tsx', name: 'RetoolCustomComponent', fileName: 'index', formats: ['umd'], }, rollupOptions: { external: ['react', 'react-dom'], output: { globals: { react: 'React', 'react-dom': 'ReactDOM', }, }, }, }, }); 

Після vite builddist/index.umd.js завантажується в CDN або Retool Cloud Storage. В інтерфейсі Retool створюється Custom Component, вказується URL бандла та iframe-URL сторінки.

Передача складних даних

Retool обмежує модель даних серіалізованими типами. Для складних структур (вкладені об'єкти, файли) використовується JSON-серіалізація всередині рядкового поля:

const [rawConfig] = Retool.useStateValue<string>({ name: 'config', initialValue: '{}', label: 'JSON Config', inspector: 'text', }); const config = useMemo(() => { try { return JSON.parse(rawConfig); } catch { return {}; } }, [rawConfig]); 

Для великих датасетів (тисячі рядків) дані проброшуються через Retool Query, яка повертає JSON — компонент отримує їх напряму без дублювання стану в model.

Як створити кастомний компонент: 5 кроків

  1. Налаштування проекту: створіть React-застосунок з Vite або CRA, встановіть @tryretool/custom-component-support.
  2. Визначте data contract: узгодьте з замовником поля моделі (entries, properties) та події (callbacks).
  3. Реалізуйте рендер та логіку: використовуйте хуки useStateValue для читання даних і useEventCallback для відправки подій.
  4. Зберіть бандл: виконайте vite build з конфігурацією UMD.
  5. Задеплойте: завантажте бандл на CDN або в Retool Toolbox та вкажіть URL в інтерфейсі Retool.
Приклад конфігурації для CDN
https://cdn.example.com/retool-components/bubble-chart/index.umd.js 

Після деплою створіть Custom Component в Retool, вставте цей URL — компонент готовий до використання.

Наш досвід і гарантії

Ми давно займаємось low-code платформами та побудували понад 50 кастомних компонентів для Retool. Гарантуємо стабільну роботу та дотримання термінів. Зв'яжіться з нами — оцінимо вашу задачу безкоштовно. Вартість розробки варіюється залежно від складності, але зазвичай окупається за 2–3 місяці використання.