当前位置: 首页 > 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】中路由加载页面直接显示空白
  • 十大券商看后市|A股风险偏好有望边际改善,市场仍处黄金坑
  • 我的科学观|张峥:AI快速迭代,我们更需学会如何与科技共处
  • 国内生产、境外“游一圈”再进保税仓,这些“全球购”保健品竟是假进口
  • 泰山景区管委会:未经审核同意不得擅自举办竞速类登山活动
  • 从“高阶智驾”到“辅助驾驶”,上海车展上的“智驾”宣发变调
  • 蚂蚁财富28亿港元要约收购耀才证券,筹谋香港券商牌照