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

Next.js 15.2.1中_rsc请求下loading.tsx与React Suspense未触发问题咨询

解决Next.js 15.2.1 App Router中_rsc请求不触发loading.tsx/Suspense的问题

针对你遇到的问题,给你几个具体的排查和解决方向:

  • 确认loading.tsx的位置是否正确
    loading.tsx必须放在对应路由段的同级目录下,比如/customers页面的loading文件得放在/app/customers/loading.tsx,不能放到父目录或者其他层级。如果位置错了,路由过渡时根本不会识别这个loading组件。另外,可以给loading.tsx加上'use client'指令,确保它作为客户端组件运行。

  • 排查_rsc请求对应的加载逻辑
    _rsc请求是Server Component的数据流请求,如果你的page.tsx是Server Component,且内部直接包含异步数据请求(比如用fetch、async/await),正常情况下loading.tsx应该自动触发。但如果是page里的子Server Component在加载数据,可能需要给这个子组件外层显式套上Suspense边界:

    // app/customers/page.tsx
    import { Suspense } from 'react';
    import CustomerData from './CustomerData'; // 含异步请求的子Server Component
    
    export default async function CustomersPage() {
      return (
        <Suspense fallback={<div>加载客户数据中...</div>}>
          <CustomerData />
        </Suspense>
      );
    }
    

    这样子组件发起_rsc请求pending时,Suspense的fallback就会显示。

  • 检查Link的target属性
    你用了target={blockItem.target ?? "_self"},如果target是_blank,会新开标签页加载页面,这时候App Router的路由过渡逻辑不会触发,loading.tsx自然不会生效。只有当target为_self(当前页面导航)时,才会触发loading状态,所以要确保导航时是在当前页面跳转。

  • 修正禁用服务器加载的处理方式
    如果把page.tsx改成客户端组件(加'use client'),客户端组件的异步请求不会自动触发Suspense,这时候需要手动处理加载状态:比如用useEffect发起请求,配合useState管理加载状态,或者用React Query、SWR这类库来处理数据加载和loading展示。

  • 检查版本bug
    Next.js 15.2.1可能存在路由过渡相关的已知问题,建议升级到同分支的最新版本(比如15.x的最新版),看看是否能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:25:02