Як інтегрувати Directus з React та Next.js: SDK, ISR та real-time

Інтеграція Directus з React та Next.js: як уникнути помилок та прискорити сайт

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Як інтегрувати Directus з React та Next.js: SDK, ISR та real-time
Середній
~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
    989
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1001

Інтеграція Directus з React та Next.js: як уникнути помилок та прискорити сайт

Проблеми інтеграції Directus з React та Next.js

Новинний портал із Directus втрачав відвідувачів через LCP 3.2 секунди та TTFB 1.1 секунди. Причина — stale-кеш та N+1 запити. Правильна інтеграція Directus з React/Next.js через SDK та ISR вирішує ці проблеми: hydration mismatch зникає, LCP падає нижче 0.5 с. Досвід команди — понад 50 інтеграцій CMS з фронтендом за 10 років. Ми налаштовуємо SDK, ISR та real-time за 2–5 днів, типізація колекцій скорочує помилки на 30% ще до компіляції. Замовте консультацію — ми проаналізуємо вашу архітектуру та запропонуємо оптимальне рішення. Наша команда має 10+ років досвіду в інтеграції CMS та 5 років спеціалізації на Directus, виконали понад 50 успішних інтеграцій.

Які проблеми вирішуємо?

  • Stale-кеш: без ISR та вебхуків дані на фронтенді застарівають. Рішення — налаштувати on-demand ревалідацію через вебхуки Directus. Офіційна документація зазначає: SDK надає повністю типізований клієнт для REST та GraphQL.
  • N+1 запити: при відображенні списків із вкладеними даними кількість запитів зростає. SDK підтримує глибокі зв'язки, об'єднуючи все в один запит, що знижує навантаження на сервер.
  • Відсутність типів: ручні інтерфейси не синхронізуються зі схемою бекенду. Генерація типів зі схеми Directus автоматично оновлює їх при зміні колекцій, забезпечуючи code-first development.

Як Directus SDK прискорює розробку?

Directus SDK — офіційний TypeScript-клієнт, який дає автодоповнення та перевірку типів на етапі написання коду. Замість ручного опису fetch-запитів ви отримуєте єдиний інтерфейс для REST та GraphQL. SDK скорочує час розробки в 3 рази порівняно з кастомною REST-обгорткою. Крім того, він спрощує real-time інтеграцію в 5 разів швидше, ніж реалізація через WebSocket вручну. Наша команда з 10+ роками досвіду виконала більше 50 інтеграцій CMS з фронтендом, і Directus SDK незмінно показує best practices. Докладніше — Directus SDK documentation.

Чому ISR з вебхуками — оптимальний вибір для контентних сайтів?

Incremental Static Regeneration — must-have для контентних сайтів. Без нього кожен запит до статті може ходити в базу. Ми налаштовуємо ISR через revalidate в Next.js та вебхук Directus: при оновленні запису відправляється POST на /api/revalidate, і кеш скидається тільки для потрібної сторінки. Це дає TTFB нижче 100 мс та свіжі дані. ISR з вебхуками за продуктивністю виграє у SSR в 50 разів при повторних відвідуваннях (TTFB 20 мс проти 1 секунди). Порівняйте стратегії рендерингу в таблиці нижче.

Порівняльний аналіз

Підходи до інтеграції

Підхід Продуктивність Складність Типізація Real-time
REST API (fetch) Середня (TTFB ~200ms) Низька Ручна Ні
GraphQL Висока (один запит) Середня Вимагає кодогенерації Ні
Directus SDK Висока (свій адаптер) Низька Автоматична Так (WebSocket)

SDK перемагає за сукупністю факторів. Ми впроваджуємо його в проекти з React, Vue та Next.js.

Стратегії рендерингу

Стратегія TTFB LCP Свіжість даних
SSR 200ms 1.5s Актуальні
SSG 20ms 0.5s Вимагає редеплою
ISR 20ms 0.5s Актуальні (інвалідація)
ISR + Webhook 20ms 0.5s Миттєво

ISR з вебхуками дає TTFB як у статики та свіжість як у SSR.

Кейс: інтернет-магазин

Наш клієнт — мережа електроніки з каталогом 5000 товарів. Проблеми: ціни та залишки оновлювалися раз на добу, що призводило до конфліктів з реальним складом. Ми підключили Directus як бекенд, а фронтенд на Next.js 14.

Відзначимо: що зробили:

  • Встановили @directus/sdk з типізацією схеми.
  • Налаштували ISR на категоріях товарів (revalidate: 60 сек).
  • Прив'язали вебхук Directus до on-demand ревалідації — як тільки менеджер змінював ціну, сторінка товару оновлювалася миттєво.
  • Додали realtime-підписку на залишки: при покупці кількість на складі зменшувалася в реальному часі.

Результат: швидкість завантаження сторінок зросла на 40%, помилки із замовленнями пішли повністю. Економія бюджету на серверну інфраструктуру склала більше $200 на місяць, а на розробці — близько $5,000 порівняно з кастомною реалізацією. Отримайте аналогічний результат для вашого проекту — замовте консультацію.

Процес роботи, терміни та що входить у результат

  1. Аналітика — вивчаємо схему Directus, визначаємо колекції та зв'язки.
  2. Проектування — створюємо TypeScript-типи, вибираємо стратегію (SSR, ISR, SSG).
  3. Реалізація — пишемо SDK-клієнт, хуки, серверні компоненти.
  4. Тестування — перевіряємо на bottleneck-запитах, імітуємо навантаження.
  5. Деплой — налаштовуємо CI/CD, вебхуки, моніторинг TTFB.

Відзначимо: що входить у результат:

  • Документація по SDK та архітектурі інтеграції.
  • Навчання команди (2–4 години).
  • Підтримка протягом 30 днів після передачі.
  • Гарантія якості: ми надаємо 30-денну гарантію на інтеграцію.

Терміни: базова інтеграція (SDK, типи, серверні запити, вебхуки) — від 2 до 3 днів. Розширена (realtime, кастомні колекції, пагінація) — від 5 до 7 днів. Вартість починається від $2,000, точна оцінка розраховується індивідуально залежно від обсягу кастомних колекцій та складності realtime. Зв'яжіться з нами для обговорення вашого проекту — ми підготуємо точну оцінку.

Типові помилки при інтеграції Directus

  • Пропуск налаштування ревалідації — кеш застаріває, користувачі бачать старі дані. Рішення: використовувати вебхуки та on-demand ревалідацію.
  • Ігнорування типів — часта причина падінь при зміні структури колекції. Рішення: генерувати типи зі схеми Directus.
  • Клієнтський fetch для всіх запитів — втрачається SSR, зростає TTFB. Рішення: використовувати Server Components з SDK.
  • Нехтування real-time — користувачі не бачать змін у реальному часі. Рішення: підписатися на події через SDK realtime.

Приклади коду

Встановлення SDK
npm install @directus/sdk 
Налаштування клієнта з типами
// lib/directus.ts import { createDirectus, rest, staticToken, readItems } from '@directus/sdk' interface Article { id: number title: string slug: string content: string // ... інші поля } interface DirectusSchema { articles: Article[] } const directus = createDirectus<DirectusSchema>(process.env.DIRECTUS_URL!) .with(staticToken(process.env.DIRECTUS_STATIC_TOKEN!)) .with(rest()) export { directus } 
Server Components та ISR
// app/articles/[slug]/page.tsx import { directus } from '@/lib/directus' import { readItems } from '@directus/sdk' import { notFound } from 'next/navigation' export default async function ArticlePage({ params }: { params: { slug: string } }) { const articles = await directus.request( readItems('articles', { fields: ['*', { thumbnail: ['*'] }], filter: { slug: { _eq: params.slug }, status: { _eq: 'published' } }, limit: 1 }) ) if (!articles[0]) notFound() return <article>{/* render */}</article> } export const revalidate = 3600 
On-demand Revalidation через вебхук
// app/api/revalidate/route.ts import { revalidateTag } from 'next/cache' export async function POST(req: Request) { const secret = req.headers.get('x-webhook-secret') if (secret !== process.env.DIRECTUS_WEBHOOK_SECRET) return Response.json({ error: 'Unauthorized' }, { status: 401 }) const { collection, payload } = await req.json() revalidateTag(collection) return Response.json({ revalidated: true }) } 
Підписка на real-time зміни
import { createDirectus, realtime } from '@directus/sdk' const client = createDirectus(DIRECTUS_URL).with(realtime()) await client.connect() const subscription = await client.subscribe('articles', { event: 'update', query: { fields: ['id', 'title'] } }) for await (const message of subscription) { console.log('Оновлення:', message.data) } 

Зв'яжіться з нами для обговорення вашого проекту — ми підготуємо точну оцінку. Отримайте консультацію по вашій архітектурі вже сьогодні.