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

Next.js 与 Sanity 实时预览功能失效问题求助

Next.js + Sanity 实时预览失效排查方案
  • 检查预览模式初始化逻辑
    Pages Router 要确保getStaticProps里正确判断预览状态,并且使用预览客户端拉取数据;App Router 要在路由处理中正确调用draftMode().enable(),且页面组件能读取到预览状态。
    示例(Pages Router):

    export async function getStaticProps(context) {
      const isPreview = context.preview || false;
      // 预览模式下必须关闭CDN,避免缓存
      const client = isPreview 
        ? sanityClient.withConfig({ useCdn: false }) 
        : sanityClient;
      const pageData = await client.fetch(YOUR_QUERY);
    
      return {
        props: { pageData, isPreview },
        revalidate: 60, // 按需调整,预览模式下可设为0
      };
    }
    
  • 验证Sanity客户端权限与配置
    预览模式下必须使用带草稿读取权限的token,且客户端配置中useCdn必须设为false——CDN会缓存已发布内容,无法获取实时草稿更新。同时确认环境变量中的SANITY_API_TOKEN配置正确,且token拥有viewer及以上权限。

  • App Router 路由与布局检查
    若使用App Router,要确保预览状态能在路由层级中正确传递。比如在页面组件中直接判断:

    import { draftMode } from 'next/headers';
    import { sanityClient } from '@/lib/sanity';
    
    export default async function Page({ params }) {
      const { isEnabled } = draftMode();
      const client = isEnabled 
        ? sanityClient.withConfig({ useCdn: false }) 
        : sanityClient;
      const pageData = await client.fetch(YOUR_QUERY, params);
    
      return <div>{/* 页面内容 */}</div>;
    }
    

    注意:路由组不会影响预览状态传递,但需确保所有涉及数据拉取的组件都能读取到draftMode状态。

  • 排查Next.js缓存配置
    检查next.config.js是否存在禁用增量静态再生的配置(比如output: 'export'),这类配置会导致预览模式失效。确保revalidate参数设置合理,预览场景下可临时设为0以禁用缓存。

  • Sanity Studio 预览URL配置
    确认Studio中预览插件的URL配置正确,需携带preview=true参数(或对应预览模式触发参数)。示例:

    import { preview } from '@sanity/preview-kit';
    
    export default defineConfig({
      plugins: [
        preview({
          url: {
            preview: (doc) => `http://localhost:3000/${doc.slug.current}?preview=true`,
          },
        }),
      ],
    });
    

    打开Studio预览时,检查浏览器地址栏是否包含正确参数,是否能正常触发Next.js的预览模式。

  • 浏览器端排查
    打开浏览器DevTools,检查网络请求是否有错误(比如Sanity API返回401/403,说明token权限不足);勾选“Disable cache”后再测试预览,排除浏览器缓存导致的内容不更新问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:32:39