← Назад к вопросам

Что такое SWR?

2.2 Middle🔥 121 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое SWR?

SWR — это библиотека для React, разработанная компанией Vercel, и название которой происходит из стратегии кэширования в HTTP: Stale-While-Revalidate ("использовать устаревшие данные, пока выполняется повторная проверка"). Это не просто аббревиатура, а фундаментальная концепция, которая определяет всю архитектуру библиотеки. SWR предоставляет мощные и простые в использовании хуки (в первую очередь useSWR) для эффективного управления данными в клиентских приложениях, особенно для выполнения запросов к API, кэширования, повторной проверки данных и обработки состояния.

Основная концепция Stale-While-Revalidate

Ключевая идея SWR заключается в том, чтобы сначала отобразить данные из кэша (возможно, устаревшие), одновременно отправляя новый запрос на сервер для их обновления. После получения свежих данных кэш обновляется, и компонент автоматически ререндерится с новыми данными. Это создает иллюзию мгновенной отзывчивости интерфейса, поскольку пользователь сразу видит данные (из прошлого запроса), и затем они тихо обновляются, если изменились.

Ключевые особенности и преимущества SWR

  • Автоматическое кэширование и повторная проверка: SWR автоматически кэширует данные по ключу (обычно это URL запроса) и предоставляет множество стратегий для их повторной проверки (например, при фокусировании на окне, периодически, при повторном подключении сети).
  • Бесплатная оптимизация производительности: Благодаря кэшированию, один и тот же запрос, выполняемый в разных компонентах, будет дедуплицирован — реальный fetch произойдет только один раз.
  • Встроенная обработка состояния: Хук useSWR возвращает три ключевые значения: data (данные), error (объект ошибки) и isLoading (флаг загрузки). Это покрывает все основные состояния запроса.
  • Поддержка TypeScript: Библиотека написана на TypeScript и предоставляет прекрасную типизацию "из коробки".
  • Возможность предзагрузки данных: Можно предзагрузить данные в кэш (например, на уровне страницы или приложения) до того, как компонент, использующий их, будет отрендерен.
  • Пагинация, зависимые запросы и мутации: SWR имеет дополнительные хуки и API для сложных сценариев, таких как useSWRInfinite для пагинации, возможность выполнения зависимых запросов и функция mutate для ручного обновления кэша (например, после отправки формы).

Базовый пример использования

Вот простой пример компонента, который использует useSWR для получения данных пользователя:

import useSWR from 'swr';

// Базовый fetcher функция (можно использовать fetch, axios, GraphQL клиент)
const fetcher = (...args) => fetch(...args).then(res => res.json());

function UserProfile({ userId }) {
  // Используем хук useSWR. Ключ — URL, fetcher — функция получения данных.
  const { data, error, isLoading } = useSWR(
    `https://api.example.com/user/${userId}`,
    fetcher
  );

  if (error) return <div>Ошибка загрузки</div>;
  if (isLoading) return <div>Загрузка...</div>;

  // Данные уже доступны! Они могут быть из кэша или свежими.
  return (
    <div>
      <h1>{data.name}</h1>
      <p>{data.email}</p>
    </div>
  );
}

Сравнение с аналогичными решениями

  • React Query / TanStack Query: Это наиболее прямой и мощный конкурент. React Query предлагает более широкий набор функций и абстракций (например, для управления бесконечными запросами, мутациями). SWR часто считается более легким и простым для быстрого старта, особенно для проектов, где основная задача — fetch данных по URL.
  • Apollo Client: Специализированная библиотека для GraphQL, предоставляющая не только кэширование, но и всю инфраструктуру для работы с GraphQL (нормализацию, мутации, подписки). SWR более универсален и подходит для REST API или любого другого источника данных.
  • Ручное управление с useEffect и fetch: SWR устраняет необходимость писать boilerplate код для обработки состояния загрузки/ошибки, кэширования, дедупликации и повторной проверки, который неизбежно возникает при ручном подходе.

Когда использовать SWR?

SWR идеально подходит для современных React-приложений, которые:

  1. Часто взаимодействуют с внешними API (REST, GraphQL).
  2. Стремятся обеспечить максимальную скорость отклика и воспринимаемую производительность.
  3. Хотят минимизировать количество фактических сетевых запросов через кэширование и дедупликацию.
  4. Нуждаются в простом и эффективном способе управления состоянием данных без погружения в сложные архитектуры состояния (как Redux).

В итоге, SWR — это не просто "хук для запросов". Это комплексная стратегия и инструмент для управления потоком данных в клиентском приложении, который делает интерфейсы быстрыми, стабильными и отзывчивыми, максимально упрощая разработку сложных аспектов, связанных с асинхронными операциями. Его философия "Stale-While-Revalidate" превращает ожидание данных из проблемы в оптимизацию пользовательского опыта.

Что такое SWR? | PrepBro