Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Фронтенд
  4. React 19 Server Components с 'use server' для параллельного data fetching в дашбордах

React 19 Server Components с 'use server' для параллельного data fetching в дашбордах

Запланировано Прикреплена Закрыта Перенесена Фронтенд
react 19server componentsdata fetching
1 Сообщения 1 Постеры 4 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал отредактировано
    #1

    Обложка: React 19 Server Components с директивой 'use server' для параллельного data fetching в дашбордах

    React 19 меняет правила игры для дашбордов. Server Components рендерятся на сервере, тянут данные напрямую из баз и API, без лишних клиентских фетчей. Это решает вечную боль - водопадные запросы, где один hangs блокирует всё.

    Параллельный data fetching становится нормой: несколько async вызовов в одном компоненте летят одновременно. Директива ‘use server’ открывает Server Actions для мутаций данных. Результат - дашборды грузятся молниеносно, бандл остаётся лёгким, стейт минимальный.

    Server Components: база для дашбордов

    Server Components в React 19 - это компоненты, которые рендерятся на сервере до попадания в браузер. Они не добавляют JS в клиентский бандл, но могут fetch’ить данные из БД или API прямо в коде. В дашбордах это киллер-фича: метрики, графики, таблицы - всё подгружается параллельно без useEffect-хаоса.

    Представь дашборд с продажами, пользователями и аналитикой. Без Server Components пришлось бы кидать N фетчей с клиента - водопад, задержки, race conditions. С ними async fetch’и в компоненте запускаются параллельно, сервер собирает HTML с данными и шлёт готовый. React 19 упрощает: директива ‘use server’ не всегда нужна, файлы в серверном контексте сами становятся серверными.

    • Параллельность из коробки: await fetchUsers(), await fetchSales() в одном компоненте - React ждёт все, не блокируя.
    • Zero bundle overhead: Нет кода в клиенте для статичных частей дашборда.
    • Прямой доступ к БД: db.query() без создания API-эндпоинтов.
    • Streaming рендер: Дашборд начинает показываться, пока данные доп. фетчатся.
    Сравнение подходов Клиентский fetch Server Components
    Запросы Последовательные или с useEffect Параллельные async
    Bundle size +JS для фетчинга 0 добавочного JS
    TTFB Высокий (ждёт JS) Низкий (HTML с данными)
    Интерактивность Полная, но тяжёлая Только где нужно (‘use client’)

    ‘use server’ для Server Actions в дашбордах

    Директива ‘use server’ помечает функции как серверные действия, вызываемые из клиентского кода. В дашбордах это идеально для мутаций: обновление фильтров, экспорт данных, рефреш виджетов. Клиент сериализует аргументы, сервер исполняет, возвращает результат - без кастомных API.

    В React 19 ‘use server’ ставится в начале async-функции или файла. Для дашборда с фильтрами: клиентский компонент вызывает серверное действие с параметрами, сервер фетчит отфильтрованные метрики параллельно и рендерит. Нюанс: аргументы должны быть сериализуемыми (primitive, FormData, Date). Нет нужды в отдельном бэкенде - всё в одном месте.

    // actions.js
    'use server';
    
    export async function fetchDashboard(filters) {
      const [sales, users, metrics] = await Promise.all([
        db.sales(filters),
        db.users(filters),
        db.metrics(filters)
      ]);
      return { sales, users, metrics };
    }
    
    • Автоматическая сериализация: Клиент -> сеть -> сервер, без ручного JSON.
    • Формы и кнопки: <form action={fetchDashboard}> - submit триггерит сервер.
    • Параллельные мутации: Несколько действий в дашборде не конфликтуют.
    • Revalidation: После действия - revalidatePath('/dashboard') для кэша.

    Параллельный fetching в реальном дашборде

    В дашборде параллельный data fetching - это когда виджеты (график продаж, таблица юзеров, KPI) грузят данные одновременно. Server Component агрегирует все await’ы, рендерит JSX с ними. Клиент получает готовый HTML + минимальный JS для интерактива.

    Пример дашборда: корневой Server Component фетчит общие данные, дочерние - специфичные параллельно. React 19 оптимизирует: нет директивы ‘use server’ для чистых RSC, только для actions. Важно: избегай client-only API вроде localStorage в серверном коде - сборка выдаст ошибку.

    // dashboard/page.tsx (Server Component)
    export default async function Dashboard() {
      const [sales, users] = await Promise.all([
        fetchSales(),
        fetchUsers()
      ]);
    
      return (
        <div>
          <SalesChart data={sales} />
          <UsersTable data={users} />
        </div>
      );
    }
    
    Проблема Решение в RSC Выгода для дашборда
    Водопад запросов Promise.all -500ms TTI
    Дубли fetch-логики Сервер агрегирует Меньше багов
    Большой бандл Нет JS для данных +30% perf
    Race conditions Последовательный рендер Стабильный UI

    Комбо RSC + ‘use server’ для живых дашбордов

    Объединяй Server Components с Server Actions для full-stack дашбордов. Сервер рендерит начальный стейт, клиентские хуки добавляют интерактив (фильтры, модалки). ‘use server’ функции обновляют данные на сервере, триггеря re-render.

    В дашборде: SalesChart - клиентский (‘use client’) для зума графика, но fetch - серверный action. Параллельность сохраняется: при фильтре action фетчит несколько источников сразу. Оптимизация: используй Suspense для гранулярного стриминга виджетов.

    • Гибридная архитектура: 80% сервер, 20% клиент.
    • Кэш и reval: revalidateTag('sales') для точечных обновлений.
    • Error boundaries: Обрабатывай фейлы fetch’ей на сервере.
    • Оптимистичные обновления: Клиент меняет UI, сервер подтверждает.

    Масштаб дашбордов на RSC

    Server Components с ‘use server’ тянут дашборды на новый уровень perf’а. Параллельный fetching убивает задержки, серверные действия упрощают CRUD. Осталось доработать edge-кейсы вроде WebSocket’ов для real-time или сложных анимаций - там ‘use client’ рулит.

    Дальше думай о миграции: начинай с простых страниц, измеряй lighthouse. React 19 делает RSC стабильными, но следи за экосистемой - не все либы готовы к серверу.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы