react&vue路由使用总结(二)

简介: react&vue路由使用总结

7.Switch与404


目标

掌握Switch的用法

问题

Route组件的匹配成功之后并不会停止,它可能会匹配多个组件。

Switch

用Switch组件包裹多个Route组件。

Switch组件下,不管有多少个Route的路由规则匹配成功,都只会渲染第一个匹配的组件

示例

import React from 'react'
import ReactDom from 'react-dom'
import {
  BrowserRouter as Router,
  Route,
  NavLink,
  Switch
} from 'react-router-dom'
const Home = () => <div>主页</div>
const Article = () => <div>文章列表页</div>
const ArticleDetail = () => <div>文章详情页</div>
export default function App () {
  return (
    <div>
      <h1>react路由基本使用</h1>
      <Router>
        <NavLink to="/">主页</NavLink>&nbsp;
        <NavLink to="/article">文章列表页</NavLink>&nbsp;
        <NavLink to="/article/123">文章详情页-123</NavLink>&nbsp;
        <hr />
        <Switch>
          <Route path="/" exact component={Home} />
          <Route path="/article" component={Article} />
          <Route path="/article/123" component={ArticleDetail} />
        </Switch>
      </Router>
    </div>
  )
}
ReactDom.render(<App />, document.getElementById('root'))

8.处理404页


思路: 不设置path属性,将404页对应的路由放在switch内部的最后位置

import React from 'react'
import ReactDom from 'react-dom'
import {
  BrowserRouter as Router,
  Route,
  NavLink,
  Switch
} from 'react-router-dom'
const Home = () => <div>主页</div>
const Article = () => <div>文章列表页</div>
const ArticleDetail = () => <div>文章详情页</div>
const Page404 = () => <div>Page404</div>
export default function App () {
  return (
    <div>
      <h1>react路由基本使用</h1>
      <Router>
        <NavLink to="/">主页</NavLink>&nbsp;
        <NavLink to="/article">文章列表页</NavLink>&nbsp;
        <NavLink to="/article/123">文章详情页-123</NavLink>&nbsp;
        <hr />
        <Switch>
          <Route path="/" exact component={Home} />
          <Route path="/article" component={Article} />
          <Route path="/article/123" component={ArticleDetail} />
          <Route component={Page404} />
        </Switch>
      </Router>
    </div>
  )
}
ReactDom.render(<App />, document.getElementById('root'))

通过Switch组件非常容易的就能实现404错误页面的提示

9.页面跳转 Redirect


页面跳转

格式

<Redirect from="/" exact to="/comment" />

示例代码

import React from 'react'
import ReactDom from 'react-dom'
import { HashRouter, Route, Link, Redirect } from 'react-router-dom'
import Search from './pages/Search.jsx'
import Comment from './pages/Comment.jsx'
export default function App () {
  return (
    <div>
      <h1>react路由基本使用</h1>
      <HashRouter>
        <Switch>
          <Link to="/comment">评论</Link>
          <Link to="/search">搜索</Link>
          <Route path="/comment" component={Comment} />
          <Route path="/search" component={Search} />
             {/* <Route path="/" component={Comment} /> */}
          <Redirect from="/" to="/comment" />
        </Switch>
      </HashRouter>
    </div>
  )
}
ReactDom.render(<App />, document.getElementById('root'))

10.编程式导航


场景:

点击登录按钮,登录成功后,通过代码跳转到后台首页,如何实现?

页面跳转有两类方式:

  1. 用户点击链接跳转
  2. 写代码跳转-编程式导航

目标

掌握history对象的使用,会用它来跳转页面。

素材

index.jsx

import React from 'react'
import ReactDom from 'react-dom'
import { useHistory } from 'react-router'
import './04.css'
import {
  BrowserRouter as Router,
  Route,
  NavLink,
  Switch
} from 'react-router-dom'
import Login from './pages/Login'
import Comment from './pages/Comment'
import Search from './pages/Search'
export default function App () {
  const history = useHistory()
  console.log(history)
  return (
    <div>
      <h1>react编程式导航</h1>
      <Router>
        <NavLink to="/login">登录</NavLink>
        <NavLink to="/comment">评论</NavLink>
        <NavLink to="/search">搜索</NavLink>
        <hr />
        <Switch>
          <Route path="/login" component={Login} />
          <Route path="/comment" component={Comment} />
          <Route path="/search" component={Search} />
        </Switch>
      </Router>
    </div>
  )
}
ReactDom.render(<App />, document.getElementById('root'))

11.编程式导航的格式


import {useHistory} from 'react-router'
export default function App() {
  const history = useHistory()
  history.push('/find')
  // 前进或后退到某个页面,参数 n 表示前进或后退页面数量(比如:-1 表示后退到上一页)
  history.go(-1) 
  // 进入/frend,并替换记录
  history.replace('/frend') 
}

12.history.replace和push的区别


push:向历史记录中添加一条

replace:在历史记录中用目标记录来替换当前记录

示例

push

详情页  --> login页(push)  ----> 主页

此时,从主页后退,会回到login页。

replace

详情页  --> login页(replace)  ----> 主页

此时,从主页后退,会回到详情页。

image.png

13.动态路由与路由参数获取


目标

掌握动态路由及参数获取的用法

问题

如何设置如下路由匹配规则,以显示文章详情

1. <NavLink to="/article/1">文章1</NavLink>
2. <NavLink to="/article/2">文章2</NavLink>

动态路由

1. // 可以匹配 /article/1  /article/2  /article/xxx
2. <Route path="/article/:id" component={Article} />

说明:

  1. 上面的/:id 称为占位符。id可以改成其他的变量名。
  2. 占位符可以有多个。例如: /article/:形参1/:形参2

在组件中接收到路由的参数

有两个方式:

  1. 通过props可以
function Article(props){
    console.log(props.match.params.id)
}

14.嵌套路由的配置


业务举例:网易云嵌套路由

掌握嵌套路由的使用。

不需要学习任何新内容

示例

image.png

核心代码

App () {
  return 
    <Router>
      <ul>
        <li><NavLink to="/find">发现</NavLink></li>
        <li><NavLink to="/my">我的音乐</NavLink></li>
          <li><NavLink to="/frend">朋友</NavLink></li>
      </ul>
      <Switch>
           <Route path="/find" component={Find}></Route>
          <Route path="/my" component={My}></Route>
          <Route path="/frend" component={Frend}></Route>
      </Switch>
    </Router>
}

Find.js

Find(){
  return <Router>
    <ul>
      <li><NavLink to="/find/recommand">推荐</NavLink></li>
      <li><NavLink to="/find/top">排行榜</NavLink></li>
       <li><NavLink to="/find/list">歌单</NavLink></li>
    </ul>
    <Switch>
         <Route path="/find/recommand" component={Com1}></Route>
        <Route path="/my/top" component={Com2}></Route>
        <Route path="/frend/list" component={Com3}></Route>
    </Switch>
    </Router>
}

注意

配置嵌套路由的时候,需要对路径进行处理,必须要先匹配到父级路由,才能匹配到子路由

15.路由小结


用到的组件:

HashRouter, BrowserRouter, Link, NavLink, Route, Redirect, Switch

执行过程

  1. 点击 Link 组件(a标签),修改了浏览器地址栏中的 url
  2. React 路由监听到地址栏 url 的变化 hashChange popState
  3. React 路由内部遍历所有 Route 组件,使用路由规则(path)与 pathname(hash)进行匹配
  4. 当路由规则(path)能够匹配地址栏中的 pathname(hash) 时,就展示该 Route 组件的内容
相关文章
|
8天前
|
前端开发 API UED
React 路由守卫 Guarded Routes
【10月更文挑战第26天】本文介绍了 React 中的路由守卫(Guarded Routes),使用 `react-router-dom` 实现权限验证、登录验证和数据预加载等场景。通过创建 `AuthContext` 管理认证状态,实现 `PrivateRoute` 组件进行路由保护,并在 `App.js` 中使用。文章还讨论了常见问题和易错点,提供了处理异步操作的示例,帮助开发者提升应用的安全性和用户体验。
20 1
|
11天前
|
前端开发 安全 网络安全
React——路由Route
React——路由Route
22 2
React——路由Route
|
25天前
|
资源调度 前端开发 测试技术
React Router 路由管理
【10月更文挑战第10天】本文介绍了 React Router,一个在 React 应用中管理路由的强大工具。内容涵盖基本概念、安装与使用方法、常见问题及解决方案,如路由嵌套、动态路由和路由守卫等,并提供代码示例。通过学习本文,开发者可以更高效地使用 React Router,提升应用的导航体验和安全性。
152 19
|
12天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
12天前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
12天前
|
JavaScript 前端开发 算法
在性能上,React和Vue有什么区别
【10月更文挑战第23天】在性能上,React和Vue有什么区别
9 1
|
16天前
|
资源调度 JavaScript 前端开发
路由管理:Vue Router的使用和配置技巧
【10月更文挑战第21天】路由管理:Vue Router的使用和配置技巧
29 3
|
17天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
25天前
|
JavaScript API
vue 批量自动引入并注册组件或路由等等
【10月更文挑战第12天】 vue 批量自动引入并注册组件或路由等等
|
25天前
|
JavaScript 前端开发 API
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
vue3中常用插件的使用方法:按需引入自定义组件,自动导入依赖包,自动生成路由,自动生成模拟数据
481 0
下一篇
无影云桌面