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

umijs 4.0学习 - 路由

1.umijs路由 - 配置路由

.umirc.ts 中配置路由router

import { defineConfig } from '@umijs/max';
export default defineConfig({antd: {},access: {},model: {},initialState: {},request: {},layout: {title: 'xxxxxx',},routes: [{path: '/',redirect: '/home',keepQuery: true //参数带过去},{name: '首页',path: '/home',component: './Home',},{name: '权限演示',path: '/access',component: './Access',},{name: '测试',path: '/ceshi',component: './Ceshi',},{name: ' CRUD 示例',path: '/table',component: './Table',},],npmClient: 'pnpm',
});

component: ‘./Table’, =====>
可以是绝对路径,也可以是相对路径。如果是相对路径,会从 src/pages 开始寻找。

如果指向 src 目录的文件,可以用 @,比如 component: ‘@/layouts/basic’,推荐使用 @ 组织路由文件位置。
这里配置的文件会在layout 导航中自动增加

2.path的支持种类

/groups
/groups/admin
/users/:id
/users/:id/messages
/files/*
/files/:id/*

3.子路由配置

routes: [{ path: '/login', component: 'login' },{name: ' Father 示例',path: '/Father',component: '@/pages/Father/index.tsx',routes: [{ path: 'ceshi', component: './Ceshi' }],},],
father
import { Outlet } from 'umi';const Father: React.FC = () => {return (<div style={{ padding: 20 }}><div>22222</div><Outlet /></div>);
};export default Father;

4.页面权限配置 wrappers

{name: ' CRUD 示例',path: '/table',component: './Table',wrappers: ['@/wrappers/auth'],},

auth.tsx

import { Navigate, Outlet } from 'umi';export default (props) => {//   const { isLogin } = useAuth();if (true) {return <Outlet />;} else {return <Navigate to="/login" />;}
};

wrappers 中的每个组件会给当前的路由组件增加一层嵌套路由,如果你希望路由结构不发生变化,推荐使用高阶组件。先在高阶组件中实现 wrapper 中的逻辑,然后使用该高阶组件装饰对应的路由组件。

import { Navigate } from 'umi'const withAuth = (Component) => ()=>{const { isLogin } = useAuth();if (isLogin) {return <Component />;} else{return <Navigate to="/login" />;}
}

5.关闭layout layout: false,

 {name: ' Father1',path: '/Father1',layout: false,component: '@/pages/Father1/index.tsx',},

6.约定式路由

除配置式路由外,Umi 也支持约定式路由。约定式路由也叫文件路由,就是不需要手写配置,文件系统即路由,通过目录和文件及其命名分析出路由配置。

如果没有 routes 配置,Umi 会进入约定式路由模式,然后分析 src/pages 目录拿到路由配置。
在这里插入图片描述

7.动态路由
在这里插入图片描述
8.在src下创建layouts 自定义导航

import { Outlet } from 'umi'export default function Layout() {return <Outlet />
}

9.404 路由

在这里插入图片描述

10.路由跳转以及参数传参
Link

<Link to="/users">Users Page</Link> 跳外链 用a标签
// 带参数
<Link to={{pathname: '/user',query: { id: 123, name: 'test' } // 会被转为 ?id=123&name=test
}}>用户页
</Link>

useNavigate

import { useNavigate } from 'umi';function MyComponent() {const navigate = useNavigate();const goToHome = () => {// 基本用法navigate('/home');// 带参数navigate('/user?id=123&name=test');// 或使用对象形式navigate({pathname: '/user',query: { id: 123 }});// 后退navigate(-1);// 前进navigate(1);};return <button onClick={goToHome}>去首页</button>;
}

useHistory 常用

import { useHistory } from 'umi';function MyComponent() {const history = useHistory();const goToAbout = () => {// 跳转到指定路由history.push('/about');history.push({pathname: '/user',query: { id: 123 }});// 替换当前路由(不会加入历史记录)history.replace('/about');// 后退history.goBack();// 前进history.goForward();};return <button onClick={goToAbout}>去关于页</button>;
}

获取参数

import { useSearchParams, useParams } from 'umi';function UserPage() {// 获取query参数const [searchParams] = useSearchParams();const id = searchParams.get('id'); // 适用于 ?id=123 形式// 获取动态路由参数const params = useParams();const userId = params.id; // 适用于 /user/:id 形式return <div>用户ID: {userId}</div>;
}// 导航时传递状态
navigate('/detail', { state: { from: 'list', data: { id: 1 } } });// 在目标页面接收状态
import { useLocation } from 'umi';function DetailPage() {const location = useLocation();const { from, data } = location.state || {};return <div>来自: {from}</div>;
}
http://www.dtcms.com/a/398329.html

相关文章:

  • 【Java】P7 Java数组完全指南:从基础到进阶
  • PTZ相机AI相关的知识体系
  • Python 2025:新型解释器与性能优化实战
  • go 持续集成、持续部署之gitlab流水线+docker-compose踩坑之旅
  • 声明式事务5
  • 时序数据库选型指南:Apache IoTDB引领数字化转型新时代
  • [Android] apkm安装器 APKMirror Installer v1.10.1
  • spring boot项目使用Torna生成在线接口文档
  • 两学一做教育纪实评价系统网站店铺小程序如何开通
  • 10分钟快速部署PHP+Nginx+MySQL+Redis开发环境
  • 通过智享直播,企业如何实现精准的受众定位与内容分发
  • 【Prompt学习技能树地图】零样本与少样本提示技术实战:原理、应用与调优
  • group_points自定义tensorrt算子编写
  • 20250925问答课题-多标签分类模型
  • 唯品会库存API集成问题与技术方案解析
  • Python开发一个系统
  • 02-教务管理系统(选课管理系统)
  • 从入门到精通:逆向工程完全工具指南与桌面环境搭建
  • 注册网站做推广衡阳网站搜索引擎优化
  • 从零开始学Flink:数据转换的艺术
  • 公司做网站的流程wordpress 放大镜插件
  • 《系统与软件工程 功能规模测量 NESMA方法》(GBT 42588-2023)标准解读
  • React Testing完全指南:Jest、React Testing Library实战
  • python+springboot+django/flask的医院食堂订餐系统 菜单发布 在线订餐 餐品管理与订单统计系统
  • 半导体制造常见检测之拉曼光谱
  • Python 第七节 循环语句for和while使用详解及注意事项
  • 怎么把svg做网站背景谷歌关键词挖掘工具
  • Vue3中的computed属性
  • 7. 临时变量的常量性
  • SNK施努卡有色冶炼自动化解决方案