第三十章 React的路由基本使用

简介: 第三十章 React的路由基本使用

关于React路由,我们在学习之前先了解一下其他知识点:SPA应用、路由的理解、react中如何使用路由。

SPA应用的理解

我们知道React脚手架给我们构建的是一个单页应用程序(SPA),在页面加载时,只会加载一个HTML文件,然后使用JavaScript动态地更新页面内容。这意味着您需要使用JavaScript来处理路由,以便在用户导航时更新页面内容,而不是通过传统的HTTP请求/响应循环加载新页面。

  • SPA全称:single page web application
  • 整个应用只有一个完整的页面
  • 点击页面中的路由链接不会刷新页面,只会做页面的局部更新
  • 数据都需要通过ajax请求获取, 并在前端异步展现image.png

SPA的优点包括:

- 更快的页面加载速度,因为只需要加载一次HTML文件,之后只需要更新页面内容。

- 更好的用户体验,因为页面不会因为每次导航而重新加载。

- 更容易实现动态内容,因为可以使用JavaScript来更新页面内容。

SPA的缺点包括:

- 对SEO不友好,因为搜索引擎通常只会抓取初始HTML文件,而不会执行JavaScript来抓取动态内容。

- 对于较大的应用程序,可能会导致性能问题,因为需要加载大量的JavaScript代码。

- 对于不支持JavaScript的用户,可能无法访问应用程序。

路由的理解

1、什么是路由?

简单的说一个路由就是一对映射关系 (key: value), key为路径,value为function或者component

2、路由分类

  1. 后端路由:
  2. 理解: valuefunction, 用来处理客户端提交的请求。
  3. 注册路由: router.get(path, function(req, res))
  4. 工作过程:当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据

前端路由:

  1. 浏览器端路由,valuecomponent,用于展示页面内容。
  2. 注册路由:
  3. 工作过程:当浏览器的path变为/test时, 当前路由组件就会变为Test组件

React中如何使用路由

为了在React应用程序中实现路由,您可以使用React Router库。

React Router库通过使用浏览器的历史记录API来操作URL并根据当前URL呈现适当的组件来工作。当用户单击与定义的路由匹配的链接时,URL会更改并呈现相应的组件。React Router库提供了多种路由类型,包括BrowserRouter、HashRouter、MemoryRouter等。其中BrowserRouter使用HTML5的history API来实现路由,HashRouter使用URL的hash部分来实现路由,MemoryRouter则将路由信息存储在内存中。

在使用React Router时,您需要将路由器包装在应用程序的根组件中,并使用Route组件来定义每个路由。Route组件可以使用path属性来定义路由的路径,component属性来指定路由匹配时要呈现的组件。Switch组件用于包装Route组件,以确保只有一个路由匹配时才会呈现相应的组件。如果您需要在路由之间传递参数,可以使用URL参数或查询参数。URL参数是在路径中定义的参数,例如/users/:id,其中:id是一个参数。查询参数是在URL中以?开头的键值对,例如/users?id=123。您可以使用React Router提供的useParams和useLocation钩子来访问这些参数。

编写案例

步骤一:安装React官方维护的路由依赖库

npm i react-router-dom --save

步骤二:编写组件Home

import React, { Component } from 'react'
export default class Home extends Component {
  render() {
    return <h2>我是Home的内容</h2>
  }
}

步骤三:编写组件About

import React, { Component } from 'react'
export default class About extends Component {
  render() {
    return <h2>我是About的内容</h2>
  }
}

步骤四:编写组件App

import React, { Component } from 'react'
import Home from './components/Home'
import About from './components/About'
import {Link,Route} from 'react-router-dom'
export default class App extends Component {
  render() {
    return (
      <div>
    <div className="row">
      <div className="col-xs-offset-2 col-xs-8">
        <div className="page-header"><h2>React Router Demo</h2></div>
      </div>
    </div>
    <div className="row">
      <div className="col-xs-2 col-xs-offset-2">
        <div className="list-group">
          {/* <a className="list-group-item" href="./about.html">About</a>
          <a className="list-group-item active" href="./home.html">Home</a> */}
          <Link className='list-group-item' to='/home'>Home</Link>
          <Link className='list-group-item' to='/about'>About</Link>
        </div>
      </div>
      <div className="col-xs-6">
        <div className="panel">
          <div className="panel-body">
            <Route path="/home"component={Home} />
            <Route path="/about"component={About} />
          </div>
        </div>
      </div>
    </div>
  </div>
    )
  }
}

其中关键代码有三个部分:

关键代码1:

import {Link,Route} from 'react-router-dom'

关键代码2:

<Link className='list-group-item' to='/home'>Home</Link>
<Link className='list-group-item' to='/about'>About</Link>

在React中靠路由链接通过组件Link实现切换组件–编写路由链接

关键代码3:

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

通过组件Route实现路由注册

步骤五:编写入口文件index.js

import React from 'react'
import ReactDOM from 'react-dom'
import {BrowserRouter} from 'react-router-dom'
import App from './App'
ReactDOM.render(
  <React.StrictMode>
    <BrowserRouter>
      <App/>
    </BrowserRouter>
  </React.StrictMode>,
  document.getElementById('root')
)

这里的App组件被BrowserRouter包裹, 使得整个应用共用一个路由器。

查看效果:

image.png

总结

  • 明确好界面中的导航区、展示区
  • 导航区的a标签改为Link标签:Demo
  • 展示区写Route标签进行路径的匹配:
  • 的最外侧包裹一个或者
相关文章
|
2月前
|
前端开发 JavaScript
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
本文介绍了在React项目中实现路由懒加载的方法,使用React提供的`lazy`和`Suspense`来优化项目首次加载的速度。通过将路由组件改为懒加载的方式,可以显著减少初始包的大小,从而加快首次加载速度。文章还展示了如何使用`Suspense`组件包裹`Switch`来实现懒加载过程中的fallback效果,并提供了使用前后的加载时间对比,说明了懒加载对性能的提升作用。
173 2
React项目路由懒加载lazy、Suspense,使第一次打开项目页面变快
|
14天前
|
前端开发 API UED
React 路由守卫 Guarded Routes
【10月更文挑战第26天】本文介绍了 React 中的路由守卫(Guarded Routes),使用 `react-router-dom` 实现权限验证、登录验证和数据预加载等场景。通过创建 `AuthContext` 管理认证状态,实现 `PrivateRoute` 组件进行路由保护,并在 `App.js` 中使用。文章还讨论了常见问题和易错点,提供了处理异步操作的示例,帮助开发者提升应用的安全性和用户体验。
30 1
|
17天前
|
前端开发 安全 网络安全
React——路由Route
React——路由Route
27 2
React——路由Route
|
1月前
|
资源调度 前端开发 测试技术
React Router 路由管理
【10月更文挑战第10天】本文介绍了 React Router,一个在 React 应用中管理路由的强大工具。内容涵盖基本概念、安装与使用方法、常见问题及解决方案,如路由嵌套、动态路由和路由守卫等,并提供代码示例。通过学习本文,开发者可以更高效地使用 React Router,提升应用的导航体验和安全性。
192 19
|
1月前
|
前端开发 网络架构
React 路由
10月更文挑战第11天
33 2
|
1月前
|
前端开发 JavaScript 网络架构
实现动态路由与状态管理的SPA——使用React Router与Redux
【10月更文挑战第1天】实现动态路由与状态管理的SPA——使用React Router与Redux
32 1
|
2月前
|
前端开发 Python
React技术栈-React路由插件之自定义组件标签
关于React技术栈中React路由插件自定义组件标签的教程。
54 4
React技术栈-React路由插件之自定义组件标签
|
2月前
|
移动开发 前端开发 应用服务中间件
React两种路由模式的实现原理
React两种路由模式的实现原理
83 3
|
2月前
|
前端开发 程序员 API
React技术栈-React路由插件之react-router的基本使用
这篇博客介绍了React路由插件react-router的基本使用,包括其概念、API、以及如何通过实战案例在React应用中实现SPA(单页Web应用)的路由管理。
68 9
|
3月前
|
前端开发 测试技术 开发者
React Router的神奇之处:如何用导航与路由管理让你的复杂SPA飞起来?
【8月更文挑战第31天】本文全面解析了React Router——一款用于React应用的路由与导航管理库。通过定义不同路径并依据URL渲染组件,React Router支持路径匹配、参数路由及嵌套路由等多种模式。文章详细介绍了其基本与高级用法,如使用`Link`组件导航、`Switch`组件进行路径匹配及`NavLink`自定义活动链接样式。此外,还探讨了懒加载、代码分割等性能优化技巧,并提供了简单示例代码,帮助读者快速上手。遵循本文最佳实践,开发者能够更高效地利用React Router构建复杂的单页面应用。
76 0