> Как заставить useSWR отрабатывать только на клиенте, пропуская сервер (React, JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Библио-Глобус
Стек: React, JavaScript
> Пример ответа
Чтобы заставить useSWR работать только на клиенте и не выполняться на сервере, можно использовать несколько подходов. Самый простой - проверить, что код выполняется в браузерном окружении, с помощью typeof window !== 'undefined' или хука useEffect. Вот пример:
JSXimport useSWR from 'swr';import { useEffect, useState } from 'react';function MyComponent() {const [isClient, setIsClient] = useState(false);useEffect(() => {setIsClient(true);}, []);// useSWR будет вызван только на клиентеconst { data, error } = isClient ? useSWR('/api/data', fetcher) : { data: null, error: null };if (!isClient) return null; // или заглушка для сервераif (error) return <div>Ошибка загрузки</div>;if (!data) return <div>Загрузка...</div>;return <div>{data}</div>;}
Другой вариант - использовать условный вызов useSWR внутри хука, который гарантированно выполняется только на клиенте, например, через кастомный хук с проверкой:
JSXfunction useClientSWR(key, fetcher) {const [shouldFetch, setShouldFetch] = useState(false);useEffect(() => setShouldFetch(true), []);return shouldFetch ? useSWR(key, fetcher) : { data: undefined, error: undefined };}
Это предотвращает выполнение запросов на сервере при SSR, избегая ошибок гидратации и лишних вызовов API.
> Похожие задачи по frontend
Как обработать ошибки в React приложении
Как реализовать добавление и удаление кнопок с уникальными id в React при кликах
Как реализовать кастомный хук для отслеживания первого рендера в React?
В чем разница Redux и React Context
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью