umi4学习 路由跳转 history useNavigate 的使用

umi4+history 已经不用query传参了,接下来就来讲讲如何传参吧
在这里插入图片描述

- 第一种,适用于只跳转路径,不携带参数

 import {  history } from "umi";
 history.push('/user');

- 第二种,用于携带参数,并且参数很多的情况
在这里插入图片描述

 // 列表界面
 import { useNavigate } from "umi";
 export default ()=>{
   const navigator = useNavigate();

  const handleClick=()=>{
      navigator("/user/detail", {
           state: {
           // 需要传到详情的参数
           },
    });
}

return   <Button onClick={handleClick} >进入详情</Button>
}

// 详情界面,如何获取参数
import { useLocation } from "umi";

export default () => {
// state是我们传过来的参数,这种传参和取值的形式,是不会再浏览器地址上显示字段的,比较友好,也不容易暴露信息
  const { pathname, state } = useLocation();
  
  console.log(state);
}

- 第三种 参数较少,想通过地址栏传值的

// 列表界面
import { history } from "umi";

history.push({
      pathname:’/user/detail‘,
      search: `?id=123`,
    });


// 详情界面取值
import { useLocation } from "umi";

export default ()=>{
  const { search } = useLocation();
  let searchParams = new URLSearchParams(search);
  
  console.log(searchParams.get("id"))
  
}
### UmiJS 4 中实现动态路由鉴权 在 UmiJS 4 中,可以通过配置 `routers.ts` 文件来定义应用的路由,并利用中间件或高阶组件(HOC) 来实现权限控制。对于动态路由而言,可以结合约定式路由和自定义逻辑完成复杂的权限管理。 #### 使用 Wrappers 进行鉴权 为了对特定路径下的所有子页面实施统一的身份验证机制,在路由配置中使用 `wrappers` 属性是一个常见做法: ```typescript // config/routers.ts export const routes = [ { path: '/', wrappers: ['./Authorized'], // 应用于该节点及其后代的所有请求都会经过 Authorized 组件处理 component: '../layouts', routes: [ { path: '/', redirect: '/home' }, { path: '/home', component: './Home' }, { component: './404' } ] } ]; ``` 此处 `./Authorized` 是一个 HOC 或者 React Component,负责拦截未授权访问并重定向到登录页或其他提示界面[^3]。 #### 处理可选参数的动态路由 当涉及到带有 `$` 符号标记的可选项时(如 `/users/$id$`),这些特殊模式允许 URL 参数的存在与否不影响匹配成功与否。因此,在设计鉴权策略时需考虑这种情况带来的灵活性以及潜在的安全隐患[^1]。 例如,针对用户详情页面 (`/users/:id`) 的访问可能需要额外检查当前用户的 ID 是否与其所拥有的角色相匹配;而对于不存在具体 ID 的情况则应给予适当响应而非抛出错误。 #### 结合业务需求定制化解决方案 实际项目开发过程中往往还需要根据具体的业务场景调整上述方案。比如某些情况下仅部分功能模块受保护而其他公开区域无需任何限制;又或者是多租户架构下不同客户之间资源隔离的需求等等。此时建议开发者深入理解官方文档所提供的工具链特性,并灵活运用以满足个性化要求[^2]。 ```javascript import React from 'react'; import { history, connect } from 'umi'; const Authorized = ({ children }) => { if (!localStorage.getItem('token')) { history.push('/login'); return null; } return <>{children}</>; }; export default connect()(Authorized); ``` 此代码片段展示了简单的身份验证逻辑:如果本地存储中的 token 为空,则跳转至登录页面;反之继续渲染其包裹的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值