当前位置: 首页 > news >正文

tanstack动态路由 + router/ 目录管理方案

1. 项目结构

src/
├── router/
│   ├── rootRoute.tsx
│   ├── staticRoutes.tsx
│   ├── dynamicRoutes.tsx
│   └── index.tsx
├── main.tsx
├── pages/
│   ├── Home.tsx
│   ├── About.tsx
│   └── Admin.tsx
└── components/└── Navigation.tsx

2. router/rootRoute.tsx

根路由负责放 Outlet:

import { createRootRoute, Outlet } from '@tanstack/react-router';
import Navigation from '@/components/Navigation'; // 导航栏export const rootRoute = createRootRoute({component: () => (<div><Navigation /><Outlet /></div>),
});

3. router/staticRoutes.tsx

这里放不需要权限的静态路由,比如首页、关于页:

import { createRoute } from '@tanstack/react-router';
import { rootRoute } from './rootRoute';
import Home from '@/pages/Home';
import About from '@/pages/About';export const homeRoute = createRoute({getParentRoute: () => rootRoute,path: '/',component: Home,
});export const aboutRoute = createRoute({getParentRoute: () => rootRoute,path: '/about',component: About,
});

4. router/dynamicRoutes.tsx

这里根据权限动态生成路由,比如 admin 权限才能看到:

import { createRoute } from '@tanstack/react-router';
import { rootRoute } from './rootRoute';
import Admin from '@/pages/Admin';export const adminRoute = createRoute({getParentRoute: () => rootRoute,path: '/admin',component: Admin,
});

5. router/index.tsx

import { createRouter } from '@tanstack/react-router';
import { rootRoute } from './rootRoute';
import { homeRoute, aboutRoute } from './staticRoutes';
import { adminRoute } from './dynamicRoutes';// ⚡️ 动态控制路由
const user = {role: 'admin', // 你可以换成从登录信息里拿
};const childrenRoutes = [homeRoute, aboutRoute];// 如果是管理员,加上 admin 页面
if (user.role === 'admin') {childrenRoutes.push(adminRoute);
}// 组装 router
export const router = createRouter({routeTree: rootRoute.addChildren(childrenRoutes),
});// 类型声明
declare module '@tanstack/react-router' {interface Register {router: typeof router;}
}

6. main.tsx 使用

入口不变,还是:

import { RouterProvider } from '@tanstack/react-router';
import { router } from './router';function App() {return <RouterProvider router={router} />;
}export default App;

✨ 总结

router/ 目录:拆成 root、静态路由、动态路由。
index.tsx 动态组合出符合权限的路由。

保持代码清晰又灵活,后期新增权限、新页面非常方便!

相关文章:

  • 数据分析1
  • 一文读懂Tomcat应用之 CentOS安装部署Tomcat服务
  • LabVIEW开发之困境中逼出成长力
  • 基于 Spring Boot 瑞吉外卖系统开发(八)
  • 如何在idea中写spark程序。
  • 工业通讯现场中关于EtherCAT转TCPIP网关的现场应用
  • 【爬虫】码上爬第1题:动态数据采集
  • 4月28日星期一今日早报简报微语报早读
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 软件设计师速通其一:计算机内部数据表示
  • C# wpf
  • 快速上手Prism WPF 工程
  • Python----卷积神经网络(卷积为什么能识别图像)
  • 普通IT的股票交易成长史--20250428晚
  • EXCEL中跨行匹配两组数据
  • C++编程指南39 - 不要特化函数模板
  • 【优秀三方库研读】【性能优化点滴】odygrd/quill 解决伪共享
  • DrissionPage采集京东系列——自动化登录
  • Vue 前端项目部署涉及多个文件和配置
  • 【Vue3-Bug】中路由加载页面直接显示空白
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 商务部再回应中美经贸高层会谈:美方要拿出诚意、拿出行动
  • 《2025城市青年旅行消费报告》发布,解码青年出行特征
  • 北京:下调个人住房公积金贷款利率
  • 深圳下调公积金利率,209万纯公积金贷款总利息减少9.94万
  • 公元1057年:千年龙虎榜到底有多厉害?