You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Strapi与Next.js修改数据后无法实时更新的解决方案

解决Next.js + Strapi数据更新不生效的问题

问题描述

用Strapi做后端、Next.js开发前端时,首次构建能正常拉取数据,但在Strapi后台修改内容后,前端始终显示首次构建的旧数据,无法获取更新后的内容。

问题原因

Next.js静态生成模式下会默认缓存页面数据,不会主动重新请求后端拉取最新内容,导致数据无法实时同步。

解决方案

在fetch请求的配置中添加时间驱动的缓存重新验证,指定缓存失效时长,让Next.js定期重新获取最新数据。

代码示例

import React from 'react';
import Blogs from './components/Blogs';
import Categories from './components/Categories';
import Image from 'next/image';

async function fetchBlogs() {
    const options = {
        headers: {
            Authorization: `Bearer ${process.env.STRAPI_API_TOKEN}`,
        },
        next: { revalidate: 3600 } // 每3600秒(1小时)重新验证缓存
    };

    try {
        const res = await fetch("http://127.0.0.1:1337/api/blogs?populate=*", options);
        const response = await res.json();
        return response;
    } catch (err) {
        console.error(err);
    }
}

async function fetchCategories() {
    const options = {
        headers: {
            Authorization: `Bearer ${process.env.STRAPI_API_TOKEN}`,
        },
        next: { revalidate: 3600 } // 每3600秒(1小时)重新验证缓存
    };

    try {
        const res = await fetch("http://127.0.0.1:1337/api/categories", options);
        const response = await res.json();
        return response;
    } catch (err) {
        console.error(err);
    }
}

export default async function Home() {
    const categories = await fetchCategories();
    const blogs = await fetchBlogs();

    return (
        <div> 
            <Categories categories={categories} />
            <Blogs blogs={blogs} />
        </div>
    );
}

关键说明

  • next: { revalidate: 3600 }:该配置指定当前请求的缓存有效期为3600秒(1小时),超过时长后,Next.js会在用户下次访问页面时重新请求后端拉取最新数据并更新缓存。
  • 可根据业务需求调整revalidate数值,比如设为60表示每1分钟重新验证一次。
  • 确保Strapi的API Token配置正确,避免因权限问题导致无法获取最新数据。

内容的提问来源于stack exchange,提问作者Alivajorg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:31:10