React@16.x(38)路由v5.x(3)其他组件

之前的文章中,已经介绍过了 BrowserRouter / HashRouterRouteSwitchwithRouter 这些组件。

再介绍3个常用的组件:

1,Link

官方文档

生成一个无刷新跳转的 <a> 元素。

主要的属性:

  1. to
    • 字符串,表示跳转的路径
    • 对象,属性和 history.location 的属性相同。
  2. replace,表示跳转时是否替换当前地址,默认 false
  3. innerRef,可以将 Link 内部的 <a> 元素的 ref 附着到传递的对象或函数上。

无刷新跳转的大致原理:

import { withRouter } from "react-router-dom";

function Link(props) {
    return (
        <a
            href={props.to}
            onClick={(e) => {
                e.preventDefault();
                props.replace ? props.history.replace(props.to) : props.history.push(props.to);
            }}
        >
            {props.children}
        </a>
    );
}

export default withRouter(Link);

node 就是 a 元素。
innerRef={node => { console.log(node)}}

2,NavLink

官方文档

Link 的基础上实现的,并添加了额外的功能:

to 匹配到当前路径时,会对生成的 <a> 元素添加对应的类名或样式,来表示激活状态。

举例:

<NavLink to="/b">跳转b</NavLink>

如果当前的路由路径是匹配到 /b 的(/b/b/c 等),则 <NavLink> 会给对应的 <a> 元素添加 class="active",这样就可以设置激活状态的 <a> 元素的样式了。

生成的 <a> 元素

<a aria-current="page" class="active" href="/b">跳转b</a>

主要的属性:

  1. activeClassName,匹配时的类名,默认 active
  2. activeStyle,匹配时的样式,可以直接写内联样式。
  3. exactsensitiveRoute 组件对应的属性的含义一致。

3,Redirect

官方文档

重定向组件,当加载到该组件时,会自动无刷新的跳转到指定的地址。

举例1:除了 /a/b,其他任何路径都会重定向到 /a

<Router>
    <Switch>
        <Route path="/a" component={A}></Route>
        <Route path="/b" component={B}></Route>
        <Redirect to="/a">重定向到 /a</Redirect>
    </Switch>
</Router>

举例2:当访问根路径时,登录状态则重定向到 /dashboard,否则渲染 <PublicHomePage /> 组件

<Route exact path="/">
  {loggedIn ? <Redirect to="/dashboard" /> : <PublicHomePage />}
</Route>

主要的属性:

  1. to,表示要重定向的路径。字符串或对象,和 <Link>to 属性一样。
  2. push,表示重定向跳转是 push | repalce,默认 false
  3. from,表示匹配到 from 对应的路径规则,才会进行跳转到 to
  4. exact,是否精确匹配 from
  5. sensitive,匹配 from 时是否对大小写敏感。

tofrom 都可以写正则表达式,和 <Route path="/a/:id"> 一样。

举例3

<Redirect from="/c/:id" to="/a">重定向到 /a</Redirect>

当匹配到 /c/xxx 时,才会跳转到 /a

举例4

<Redirect from="/c/:id" to="/a/:id">重定向到 /a</Redirect>

当匹配到 /c/xxx 时,会跳转到 /a/xxx


以上。

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
React Router v5 中,获取路由参数的方式会略有不同。你可以通过以下步骤在类组件中获取路由参数: 1. 首先,确保你已经正确配置了 React Router,并在应用的根组件中包裹了 `<Router>` 组件。这样才能使路由参数在整个应用中可用。 2. 在类组件中,你可以通过 `this.props.match.params` 来访问路由参数。`match` 对象中的 `params` 属性是一个包含路由参数的对象。 下面是一个示例: ```jsx import React from 'react'; import { BrowserRouter as Router, Route, Link } from 'react-router-dom'; class MyComponent extends React.Component { render() { const { id } = this.props.match.params; // 获取名为 "id" 的路由参数 return ( <div> <h1>My Component</h1> <p>路由参数: {id}</p> </div> ); } } class App extends React.Component { render() { return ( <Router> <div> <h1>App</h1> <ul> <li> <Link to="/component/1">组件 1</Link> </li> <li> <Link to="/component/2">组件 2</Link> </li> </ul> <Route path="/component/:id" component={MyComponent} /> </div> </Router> ); } } export default App; ``` 在上面的示例中,我们定义了一个 `MyComponent` 类组件,它通过 `this.props.match.params` 获取名为 "id" 的路由参数。然后,我们在 `App` 组件中使用 `<Route>` 组件来将 `MyComponent` 组件与 `/component/:id` 路径匹配。 通过这种方式,当访问 `/component/1` 或 `/component/2` 路径时,`MyComponent` 组件会被渲染,并可以获取到对应的路由参数。 请注意,上述示例是使用了 React Router v5 的方式获取路由参数。如果你正在使用 React Router v6,请参考之前我提供的关于 v6 的回答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雪天的夏风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值