当前位置: 首页 > 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 动态组合出符合权限的路由。

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

http://www.xdnf.cn/news/200197.html

相关文章:

  • 树莓派学习专题<12>:使用x264库实施H264编码--Linux和Windows上的部署
  • OpenVLA-OFT
  • 谷歌政策松绑?!3月仅下架4.8万款App,同比减少50%
  • Spring生命周期
  • Linux系统编程---exec簇:进程的加载与替换
  • 安装qt4.8.7
  • 软件评测:从多维度看其界面、功能、性能稳定性如何?
  • Java后端开发day38--不可变集合Stream流
  • Java后端接口调用拦截处理:注解与拦截器的实现
  • STM32实现SPI转USB虚拟串口输出(实测40M时钟不丢包)
  • 报表工具:企业数据决策的“智能翻译官“
  • 【knife4j】添加Cookie
  • 12. RANSAC点云多平面拟合分割
  • MySQL5.7.21查询入门
  • 软链接与硬链接
  • Transformer Prefill阶段并行计算:本质、流程与思考
  • 电价单位解析与用电设备耗电成本计算
  • python程序设习题答案
  • 沐曦玩转 LMDeploy、XTuner 和 InternLM3
  • es2025新特性
  • lmms-eval--微调实战笔记
  • 2.2.2goweb内置的 HTTP 处理程序2
  • Nature Communications 仿生电子天线:赋予机器人敏锐 “触觉”
  • TimDbg
  • AT2401C与RFX2401C问题处理资料
  • 新环境注册为Jupyter 内核
  • Python内置方法干货总结
  • [OS_9] C 标准库和实现 | musl libc | offset
  • 关于消息队列的一些事~
  • LeetCode【剑指offer】系列(图和其他篇)