Какие опции есть у useSWR или useSWRData
Что проверяют
Работали ли вы с SWR на практике и понимаете ли модель stale-while-revalidate: отдать кэш сразу, а в фоне проверить свежесть. Следом обычно спрашивают, чем отличаются isLoading и isValidating и как сделать запрос по условию.
Как отвечать
Сначала поправка: хука useSWRData в SWR нет. Есть useSWR(key, fetcher, options) и специализированные хуки: useSWRInfinite для пагинации, useSWRMutation для изменяющих запросов, useSWRImmutable для данных, которые не нужно перепроверять. Спокойно поправить интервьюера здесь только плюс.
Основные опции useSWR и их значения по умолчанию:
- ключ: строка, массив или объект,
nullотключает запрос, на этом строятся зависимые запросы; - revalidateOnFocus, revalidateOnReconnect, revalidateIfStale: по умолчанию
true; - refreshInterval: по умолчанию
0, опрос выключен. В фоновой вкладке не срабатывает, пока не включитьrefreshWhenHidden; - dedupingInterval: 2000 мс, одинаковые запросы в этом окне схлопываются в один;
- fallbackData: начальные данные, в старых версиях опция называлась
initialData; - keepPreviousData: показывать прежние данные при смене ключа, удобно для поиска и пагинации;
- shouldRetryOnError, errorRetryCount, errorRetryInterval: повторы после ошибки, интервал по умолчанию 5000 мс;
- onSuccess, onError, suspense, use: колбэки, режим Suspense и middleware.
Хук возвращает data, error, isLoading, isValidating и mutate. Общие опции задаются для поддерева через <SWRConfig value={...}>. Кэш по умолчанию живёт в памяти, для сохранения между сессиями нужен свой provider.
Где спотыкаются
Используют isValidating как признак первой загрузки. Он true и при фоновой перепроверке, поэтому спиннер мигает при каждом фокусе вкладки. Для первой загрузки есть isLoading.
Пишут initialData по старым статьям. В актуальной версии эта опция не работает, нужна fallbackData.
Ждут, что mutate сам отправит данные на сервер. Он меняет кэш и запускает перепроверку, а запрос на изменение пишете вы сами или берёте useSWRMutation.