> Как вызвать useSWR по нажатию на кнопку, чтобы он не вызывался сразу (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Библио-Глобус
Стек: React
> Пример ответа
Чтобы вызвать useSWR только по нажатию на кнопку, а не сразу при монтировании компонента, нужно использовать опцию revalidateIfStale: false и revalidateOnFocus: false, а также управлять запросом через ключ, который изначально равен null. Когда ключ равен null, SWR не выполняет запрос. При клике на кнопку меняем ключ на нужное значение, и запрос выполняется.
Пример:
JSXimport useSWR from 'swr';import { useState } from 'react';const fetcher = (url) => fetch(url).then((res) => res.json());function DataFetcher() {const [shouldFetch, setShouldFetch] = useState(false);const { data, error, isValidating } = useSWR(shouldFetch ? '/api/data' : null,fetcher,{revalidateIfStale: false,revalidateOnFocus: false,});const handleClick = () => {setShouldFetch(true);};return (<div><button onClick={handleClick} disabled={shouldFetch}>Загрузить данные</button>{isValidating && <p>Загрузка...</p>}{error && <p>Ошибка: {error.message}</p>}{data && <pre>{JSON.stringify(data, null, 2)}</pre>}</div>);}
В этом примере useSWR не вызывается, пока shouldFetch равно false. После клика по кнопке shouldFetch становится true, и SWR выполняет запрос. Дополнительные опции предотвращают повторные запросы при фокусе или устаревании данных.
> Похожие задачи по frontend
Какие опции есть у useSWR или useSWRData
Как работает lazy загрузка в useSWR
Как работает useState в Next.js и является ли состояние глобальным или локальным для страницы
Будет ли middleware блокировать показ страницы пока useSWR не отработает
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью