Получение данных в Vercel не обновляет NextJs 14

Когда я получил некоторые данные для внешнего API, я увидел, что данные не обновляются в рабочей версии Vercel, но в локальной версии с жестким обновлением (ctrl-f5) данные обновляются хорошо. В моем приложении данные API обновляются каждые 24 часа. Я пытался отключить кеш в ответе API, но это не сработало. Единственный способ обновления данных в Верселе, который я нашел, — это перераспределение, но это ужасно.

Мой код выборки находится в /src/lib/data.js. (Часть кода)

export async function FetchPluvis() {
  const url = 'https://api-acua-production.up.railway.app/Api/pluvis'
  const response = await fetch(url, {
    headers: {
      'Cache-Control': 'no-cache',
    },
  })
  const data = await response.json()
  return data
}
}

И реализован в моем компоненте Bento /src/компоненты/бенто

(Часть кода)

import { FetchPluvis } from '../lib/data'

async function Bento() {
  const pluvis = await FetchPluvis()
  return (
        <div className = "col-span-6 rounded-lg bg-blue-950 bg-opacity-70 backdrop-blur-sm">
          <h1 className = "p-2 text-center text-2xl font-normal text-[#7387f9]">
            Pluviometros últimas horas (l/m2)
          </h1>
          <div className = "flex flex-col content-center justify-center px-2 text-[15px] lg:text-[16px]">
            <table className = "text-textprimary">
              <thead className = "text-left text-[#47ff63ab]">
                <tr>
                  <th className = "px-1">Pluviometro</th>
                  <th className = "px-1 text-right">Prov</th>
                  <th className = "px-1 text-right">1h</th>
                  <th className = "px-1 text-right">6h</th>
                  <th className = "px-1 text-right">12h</th>
                  <th className = "px-1 text-right">24h</th>
                </tr>
              </thead>
              <tbody>
                {pluvis.map((pluvi) => (
                  <tr
                    className = "transition-all hover:scale-105 hover:text-[#0b92e4]"
                    key = {pluvi.id_pluviometro}
                  >
                    <td className = "p-1">{pluvi.nombre}</td>
                    <td className = "p-1 text-right">{pluvi.provincia}</td>
                    <td className = "p-1 text-right">{pluvi.h1}</td>
                    <td className = "p-1 text-right">{pluvi.h6}</td>
                    <td className = "p-1 text-right">{pluvi.h12}</td>
                    <td className = "p-1 text-right">{pluvi.h24}</td>
                  </tr>
                ))}
              </tbody>
            </table>
          </div>
        </div>
)
}

Когда я удаляю данные из БД, на локальном хосте

В производстве Vercel, когда база данных пуста

Возможно, я делаю что-то не так, но я новичок в этом, надеюсь, мне поможет кто-то более опытный.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В верхней части вашего компонента попробуйте добавить export const dynamic = "force-dynamic";

Производственная сборка совершенно другая в nextjs, где все кэшируется по умолчанию, приведенный выше код откажется от кэширования, поэтому вы всегда будете получать новые данные при каждом обновлении. Кроме того, поскольку вы упомянули, что ваши данные меняются каждые 24 часа, вы также можете добавить export const revalidate = 10;, чтобы это вызывало API каждые 10 секунд

Ответ принят как подходящий

Я исправил это, добавив эти строки

export const revalidate = 60
export const dynamic = 'force-dynamic'
export const fetchCache = 'force-no-store' 

в мой файл Page.js, чтобы проверять данные каждые 60 секунд, и добавить приостановку для потоковой передачи данных с резервным скелетом.

// src/Page.js
import Intro from '@/app/components/Intro'
import Bento from '@/app/components/Bento'
import Fuentes from '@/app/components/Fuentes'
import SkeletonBento from './skeletrons/BentoSkeleton'
import { Suspense } from 'react'

export const revalidate = 60
export const dynamic = 'force-dynamic'
export const fetchCache = 'force-no-store'

export default function Home() {
  return (
    <>
      <Intro />
      <Suspense fallback = {<SkeletonBento />}>
        <Bento />
      </Suspense>
      <Fuentes />
    </>
  )
}


Другие вопросы по теме

Продолжайте вызывать CallbackRouteError при попытке использовать функцию входа в (next-)authjs v5
Как добавить динамические метаданные на страницу [slug] в маршрутизаторе приложений next.js
Невозможно изменить состояние кнопки диалогового окна onClick
Next.js revalidateTag, revalidatePath не работает
Ошибка: на странице отсутствует параметр «generateStaticParams()», который необходим для конфигурации «вывод: экспорт»
Ошибка типа: невозможно прочитать свойства неопределенного значения (чтение «узла»)
Как устранить ошибку: не удалось решить: процесс «/bin/sh -c Yarn install --frozen-lockfile» при создании файла Docker?
Резервные повторные триггеры React
Приложению RAG не удается использовать DataAPIClient: «Ошибка загрузки клиента fetch-h2 для DataAPIClient... попробуйте установить для httpOptions.client значение «fetch»»
Адаптер аутентификации Prisma — ошибка типа: невозможно прочитать свойства undef (чтение «создать»)