ISR по требованию — отключить кеш и отображать обновленный контент для первого запроса
Информация об окружении Операционная система: Платформа: linuxArch: x64 Версия: #66~20.04.1-Ubuntu SMP Среда, 25 января, 09:41:30 UTC 2023 Двоичные файлы:Node: 14.17.5npm: 6.14.14Yarn: N/Apnpm: N/A Соответствующие пакеты: следующий: 13.1.6eslint-config-next: 13.1.6 реагировать: 18.2.0 реагировать-дом: 18.2.0
Области, в которых Next.js затрагивает выборку данных (gS(S)P, getInitialProps)
Ссылка на сайт, воспроизводящий эту проблему https://on-demand-isr-no-cache.vercel.app/
Чтобы воспроизвести Переход с домашней страницы на страницу ssg — статическая страница Показывает текущую дату (последней сборки / повторной проверки) Перейти обратно на домашнюю страницу Перейти на страницу ssr Показывает текущую дату (последнюю) Нажмите на дату выполнения запроса API, который повторно проверяет страницу ssg — ISR ПО ЗАПРОСУ Перейти обратно на домашнюю страницу Перейти к ssg По-прежнему отображается текущая дата (последней сборки/повторной проверки) — не текущая дата после повторной проверки Опишите ошибку После повторной проверки страницы с помощью ISR по запросу, когда пользователь наводит указатель мыши на страницу для ssg , делается апи запрос к getStaticProps для получения данных Если пользователь нажимает на ссылку до завершения запроса(обычно так и бывает) и переходит - он получает старые данные(дата)
При последующих посещениях страницы или при перезагрузке содержимое статической страницы обновляется.
Ожидаемое поведение Это приводит к несоответствию данных в реальном времени. Пользователь должен перейти на страницу ssg с проверенными данными.
Как избежать/отключить кеширование устаревших данных в этом сценарии?
Ссылка на код
api route
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
await res.revalidate('/ssg');
res.json({ message: 'SSG Re validated!' })
}
ssg.tsx page
export async function getStaticProps () {
return { props: { data: [{name: new Date().toString()}] } }
}