IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React 页面路由 -> 正文阅读

[JavaScript知识库]React 页面路由

目录

一、页面路由

1、什么是页面路由

2、页面路由的两种方式

二、路由的基本使用

1、安装 react-router-dom 模块

2、实现路由模式的组件

3、Route 组件

4、Router 组件

5、Link和NavLink组件

6、Redirect:页面重定向

7、Switch

8、withRouter

9、Router Hooks

10、404视图


一、页面路由

1、什么是页面路由

路由就是一种映射关系,前端路由就是根据不同的url去切换不同的组件,简单理解就是可以从一个页面跳转到另一个页面,前端路由就是通过一套url路径 与 组件的对应关系,后端路由就是根据用户不同的请求去返回不同的内容。

2、页面路由的两种方式

(1)hash模式:在url后带#


? ? ? ? ? 缺点:传递参数的方式是在url后拼接,会有体积的限制

?(2)history模式:
?? ??? ?
?? ??? ? ? A、可以传递复杂的参数??BrowserRoute
?? ??? ? ??
?? ??? ? ? B、可以监听浏览器的前进、后退事件(back、forward、go)
?? ??? ? ??

二、路由的基本使用

1、安装 react-router-dom 模块

npm install react-router-dom	

2、实现路由模式的组件

实现路由模式的组件:(最外层):决定路由模式

  • ?? ? ? ?HashRouter组件:实现hash模式的路由
  • ? ? ? ? BrowserRouter组件:实现history模式的路由
  // hash模式
ReactDOM.render(
	 <HashRouter>
      	<Route path="/" component={Home}/>
</HashRouter>
)
// history模式
ReactDOM.render(
	   <BrowserRouter>
      	 <Route path="/" component={Home} />
      </BrowserRouter>
)

【注意】:其实就是路由的hash和history两种模式,并且这两个组件是路由的容器,必须在最外层

3、Route 组件

Route组件:实现路径和显示组件之间的映射

?<Route path="/users" component={组件} render={返回dom} location="route对象" exact="匹配规则"/>

? ? ? ? 若用render渲染dom,就不需要component
?? ??? ?
?? ??? ?exact的默认值为false,若设置为true则表示精确匹配

4、Router 组件

? 低级路由,适用于任何路由组件,主要和redux深度集成,使用必须配合history对象,使用Router路由的目的是和状态管理库如redux中的history同步对接

<Router history={history}>
??? ...
</Router>

5、Link和NavLink组件

类似于<a>标签
?? ?

  • ?? ? ? ?Link组件的api属性:

?? ??? ? ? ?<Link to="" />
?? ??? ??? ?to属性表示目标页面的路径

  • ?? ? ?NavLink组件的api属性:包含了Link组件的所有api,在Link组件的基础上进行了扩展

?(1)Link的api

  1. to 有两种写法,表示跳转到哪个路由
  • 字符串写法

??

??? <Link to="/a"?? />
  • 对象写法
? <Link to={{

? pathname: '/courses',

? search: '?sort=name',

? hash: '#the-hash',

? state: { fromDashboard: true }

}}/>
  1. replace就是将push改成replace
  2. innerRef访问Link标签的dom

(2)NavLink的api

  1. Link的所有api
  2. activeClassName 路由激活的时候设置的类名
  3. activeStyle 路由激活设置的样式
  4. exact? 参考Route,符合这个条件才会激活active类
  5. strict? 参考Route,符合这个条件才会激活active类
  6. isActive 接收一个回调函数,active状态变化的时候回触发,返回false则中断跳转
const oddEvent = (match, location) => {
? console.log(match,location)

? if (!match) {
??? return false

? }
? console.log(match.id)
? return true
}

<NavLink isActive={oddEvent} to="/a/123">组件一</NavLink>
  1. location 接收一个location对象,当url满足这个对象的条件才会跳转
<NavLink to="/a/123" location={{ key:"mb5wu3", pathname:"/a/123" }}/>

6、Redirect:页面重定向

// 基本的重定向

<Redirect to="/somewhere/else" />

// 对象形式

<Redirect
? to={{
??? pathname: "/login",
??? search: "?utm=your+face",
??? state: { referrer: currentLocation }
? }}
/>

// 采用push生成新的记录

<Redirect push to="/somewhere/else" />

// 配合Switch组件使用,form表示重定向之前的路径,如果匹配则重定向,不匹配则不重定向

<Switch>
? <Redirect from='/old-path' to='/new-path'/>
? <Route path='/new-path' component={Place}/>
</Switch>

7、Switch

路由切换,只会匹配第一个路由,可以想象成tab
Switch内部只能包含RouteRedirectRouter

??<Switch>
??<Route exact path="/" component={Home}/>
? <Route path="/about" component={About}/>
? <Route path="/:user" component={User}/>
? <Route component={NoMatch}/>
  </Switch>

8、withRouter

当一个非路由组件也想访问到当前路由的match,location,history对象,那么withRouter将是一个非常好的选择,可以理解为将一个组件包裹成路由组件

import { withRouter } from 'react-router-dom'
const MyComponent = (props) => {
??? const { match, location, history } = this.props
???? return (
??????? <div>{props.location.pathname}</div>
??? )
}
const FirstTest = withRouter(MyComponent);

9、Router Hooks

????? 在Router5.x中新增加了Router Hooks用于在函数组件中获取路由信息。使用规则和React的其他Hooks一致。

(1)useHistory:返回history对象

(2)useLocation:返回location对象

(3)useRouteMatch:返回match对象

(4)useParams:返回match对象中的params,也就是path传递的参数??

 import React from ‘react’;
??? import { useHistory } from ‘react-router-dom’;
?function backBtn(props) {
???? ???let? history = useHistory;
???? ???return <button onClick={ ()=> {
???????? ?????history.goBack();
}>返回上一页</button>
????? ?}

10、404视图

既然路由就需要考虑一个问题---404视图。当用户访问一些不存在的URL时就该返回404视图了,但不存在的地址该如何匹配呢?----使用Switch

Switch组件的作用类似于JS中的switch语句,当一项匹配成功之后,就不再匹配后续内容。这样的话就可以把要匹配的内容写在Switch组件中,最后一项写404视图,当其他都匹配不成功时就是404视图。例如:

<Switch>

? <Route exact={true} path={"/"} component={Home}/>

? <Route path={"/about"} component={About}/>

? <Route path={"/topics"} component={Topics}/>

? <Route component={View404}/>

</Switch>

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:20:07  更:2022-02-28 15:20:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:53:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码