umi react router 路由

环境

yarn global add umi //全局安装umi乌米

mkdir myapp && cd myapp //创建空文件夹并进入文件夹

yarn create umi

//❯ app             - Create project with a simple boilerplate, support typescript.
//Do you want to use typescript? (y/N)
//❯◯ antd


yarn start //启动项目

官方文档

文件结构

在pages文件夹下新建文件夹,users,然后新建四个文件

.
├── layouts
│   ├── index.css
│   └── index.js
└── pages
    ├── index.js
    └── users
        ├── $detail.js
        ├── _layout.js
        ├── index.js
        └── query.js
  • $detail.js 是动态路由,需要在命名前添加$
  • query.js是会带query参数要打开的页面,还处理了hash定位
  • _layout.js是user路由下的布局文件,相当于子路由
  • index.js是user默认打开页面
  • layouts是全局页面布局文件夹

路由umi会自动根据文件结构处理,我们可以不管,当然也可以自己定义。这里只关注路由打开、传参方式

Link打开

先在user的默认打开页面定添加打开路由

// user/index.js

import Link from 'umi/link'

<Link to="/users/query/"> to query </Link><br></br>
<Link to={{
    pathname:"/users/query/",
    query:{
        name:'name1',
        id:'id123',
    }
}}> to query obj </Link><br></br>
<Link to="/users/123123"> to /users/:detail </Link>

 

路由为:

第一个、/users/query/

第二个、/users/query/?id=id123&name=name1

第三个、/users/123123

js打开

import router from 'umi/router'

//法一
router.push('/users/'+args.id);
//法二
router.push({
    pathname:'/users/query/',
    query:{
        id:args.id,
        name:args.name
    },
    hash:'id8',
    state:args,
    state2:args,//可以任意添加
});

query可以额外传对象的参数,路由为

第一个、/users/123123

第二个、/users/query/?id=id123&name=name1

 

页面获取参数方法

this.props.location = 
{
    hash: "#id7",
    key: "51uuto",
    pathname: "/users/123123",
    query: {},
    params:{},
    search: "id=id123&name=name1",
    state: undefined,
    state2: undefined,
}

hash不会定位,需要自行处理。

hash 自行定位

法一:

//与href效果相同
document.getElementById(idName).scrollIntoView()

法二:

//可以让元素位置在窗口上下居中,还需要自行改变页面地址。href不需要
window.scrollTo(0, anchorElement.offsetTop - window.innerHeight / 2);
//不需要更改地址
<a key={i} href={'#id'+i}>{'id'+i}</a>

源码地址

React Umi 是一个以路由为基础的 React 框架,它可以帮助我们更加高效地开发 React 应用。在 Umi 中,路由是非常重要的一部分,因此它提供了一些路由相关的 API,帮助我们更加方便地进行路由配置和管理。 下面是一个简单的 Umi 路由封装代码示例: ```javascript import { Router, Route, Switch, Redirect } from 'umi'; // 自定义路由组件 const PrivateRoute = ({ component: Component, ...rest }) => ( <Route {...rest} render={(props) => localStorage.getItem('token') ? ( <Component {...props} /> ) : ( <Redirect to={{ pathname: '/login' }} /> ) } /> ); export default function RouterConfig({ history }) { return ( <Router history={history}> <Switch> <Route path="/login" exact component={Login} /> <PrivateRoute path="/" exact component={Home} /> <PrivateRoute path="/profile" exact component={Profile} /> <Route component={NotFound} /> </Switch> </Router> ); } ``` 在这段代码中,我们定义了一个名为 `PrivateRoute` 的自定义路由组件,用于实现登录验证功能。它会根据用户是否登录来判断是否渲染对应的组件。 在 `RouterConfig` 函数中,我们使用了 `Router`、`Route`、`Switch` 和 `Redirect` 这些 Umi 提供的路由组件,来进行路由的配置和管理。其中,`Switch` 组件用于包裹所有的 `Route` 组件,用于匹配路径,并渲染对应的组件。`Redirect` 组件用于进行重定向操作。 通过以上方式,我们可以非常方便地进行路由封装和管理,提高代码的可维护性和可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值