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

目录

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

再介绍3个常用的组件:

官方文档

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

主要的属性:

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

无刷新跳转的大致原理:

js 复制代码
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)}}

官方文档

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

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

举例:

html 复制代码
<NavLink to="/b">跳转b</NavLink>

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

生成的 <a> 元素

html 复制代码
<a aria-current="page" class="active" href="/b">跳转b</a>

主要的属性:

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

3,Redirect

官方文档

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

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

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

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

html 复制代码
<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

html 复制代码
<Redirect from="/c/:id" to="/a">重定向到 /a</Redirect>

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

举例4

html 复制代码
<Redirect from="/c/:id" to="/a/:id">重定向到 /a</Redirect>

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


以上。

相关推荐
jin12332223 分钟前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos
2501_9209317042 分钟前
React Native鸿蒙跨平台医疗健康类的血压记录,包括收缩压、舒张压、心率、日期、时间、备注和状态
javascript·react native·react.js·ecmascript·harmonyos
落霞的思绪1 小时前
配置React和React-dom为CDN引入
前端·react.js·前端框架
Hacker_Z&Q1 小时前
CSS 笔记2 (属性)
前端·css·笔记
Anastasiozzzz1 小时前
LeetCode Hot100 295. 数据流的中位数 MedianFinder
java·服务器·前端
橙露2 小时前
React Hooks 深度解析:从基础使用到自定义 Hooks 的封装技巧
javascript·react.js·ecmascript
Exquisite.2 小时前
Nginx
服务器·前端·nginx
2501_920931702 小时前
React Native鸿蒙跨平台使用useState管理健康记录和过滤状态,支持多种健康数据类型(血压、体重等)并实现按类型过滤功能
javascript·react native·react.js·ecmascript·harmonyos
打小就很皮...2 小时前
dnd-kit 实现表格拖拽排序
前端·react.js·表格拖拽·dnd-kit
Ulyanov2 小时前
从静态到沉浸:打造惊艳的Web技术发展历程3D时间轴
前端·javascript·html5·gui开发