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

如何在Next.js路由中复用加载指示器?

在Next.js中复用全局加载指示器的方法

你当前通过每个路由创建loading.js导入通用组件的方式可行,但有更高效的方案,无需重复创建文件:

1. 路由组共享加载组件

把需要共用加载效果的路由归类到同一个路由组(用括号包裹的文件夹,比如(common-routes)),然后在这个路由组的根目录创建一个loading.js,直接导出你的通用加载组件。这样组内所有路由都会自动使用这个加载组件,不用逐个路由创建文件。

示例目录结构:

app/
  (common-routes)/
    loading.js
    dashboard/
      page.js
    settings/
      page.js
    profile/
      page.js
  about/
    page.js  // 这个路由不在组内,可自定义加载组件或使用全局的

(common-routes)/loading.js代码:

import LoadingWithSpinner from '@/components/Loading';

// 直接导出通用组件,无需额外包裹函数
export default LoadingWithSpinner;

2. 全局默认加载组件

如果想让所有路由默认使用同一个加载组件,只需在app目录的根级别创建loading.js。任何没有自定义loading.js的路由都会自动继承这个全局加载组件;如果某个路由需要特殊加载效果,只需在该路由目录下单独创建loading.js即可覆盖全局设置。

示例目录结构:

app/
  loading.js  // 全局默认加载组件
  dashboard/
    page.js
  settings/
    page.js
  checkout/
    loading.js  // 这个路由会使用自定义的加载组件
    page.js

app/loading.js代码:

import LoadingWithSpinner from '@/components/Loading';

export default LoadingWithSpinner;

3. 可选:根据路由动态调整加载内容

如果需要给不同路由的加载提示做细微区分,可以在通用LoadingWithSpinner组件中结合usePathname获取当前路由,动态调整显示内容:

'use client';
import { usePathname } from 'next/navigation';

export default function LoadingWithSpinner() {
  const currentRoute = usePathname();
  
  return (
    <div>
      {/* 你的SVG加载动画 */}
      <span className="sr-only">
        {currentRoute.includes('dashboard') ? '加载仪表盘数据...' : '加载中,请稍候...'}
      </span>
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:07:35