当前位置: 首页 > news >正文

React路由(React学习笔记_09)

React路由

1,路由基础

现代的前端应用大多都是SPA(单页应用程序),也就是只有一个HTML页面的应用程序。因为它的用户体验更好、对服务器的压力更小,所以更受欢迎。为了有效的使用单个页面来管理原来多个页面的功能,前端路由应运而生。

1, 安装: yarn add react-router-dom
2, 导入路由的三个核心组件:Router/Route/Link
import {BrowserRouter as Router, Route, Link} from 'react-router-dom'3, 使用Router组件包裹整个应用
<Router><div>// ...</div>
</Router>
使用步骤:

4, 使用Link组件作为导航菜单(路由入口)

<Link to="/first">页面一</Link/>

5, 使用Route组件配置路由规则和要展示的组件(路由出口)

const First = () => <p>页面一的内容</p>
<Router><div>react<Link to='/first'>页面1</Link><Route path='/first' component={First} /></div>
</Router>

2,路由组件说明

  • Router组件:包裹整个应用,一个React应用只需要使用一次
    • 两种常见Router:HashRouter、BrowserRouter
    • HashRouter: 使用URL的哈希值实现(localhost:3000/#/first)
    • 推荐使用BrowserRouter:使用H5的history api实现(localhost:3000/first)
  • Link组件:用于指定导航链接(a标签)
    • to属性:浏览器地址栏中的pathname(location.pathname)
  • Route组件:指定路由展示组件相关信息
    • path属性:路由规则
    • component属性:展示的组件
    • Route组件写在哪,渲染出来的组件就展示在哪

3,路由的执行过程

  • 1,点击Link组件,修改了浏览器地址栏中的url
  • 2,React路由监听到地址栏url的变化
  • 3,React路由内部遍历所有Route组件,使用路由规则(path)与pathname进行匹配
  • 4,当路由规则(path)能匹配地址栏中的pathname时,就展示该Route组件的内容
image

4,编程式导航

  • 编程式导航:通过JS代码实现页面跳转
  • history是react路由提供的,用于获取浏览器历史记录的相关信息
  • push(path):跳转到某个页面,参数path表示要跳转的路径
  • go(n):前进或后退到某个页面,参数n表示前进或者后退页面的数量
class Child extends Component{handleLogin = () => {this.props.history.push('/home')}
}

5, 默认路由

  • 默认路由:进入页面的时候就会匹配的路由
    • 默认路由path为: /
    <Route path="/" component={Home} />
    

示例:

const Home = () => <p>进入页面的时候就展示的Home组件的内容</p>
const App = () => (<Router><div><p>编程式导航</p><Route path="/" component={Home} /></div></Router>
)

6,匹配模式

  • 模糊匹配
    • 默认情况下,react的路由是模糊匹配的
    • 模糊匹配规则,只要pathname以path开头就会匹配成功
      • path代表route组件的path属性
      • pathname代表 Link组件的to属性(即location.pathname)
        比如:path为/,能够匹配所有的pathname。path为:/first,能够匹配所有的/first或/first/a或/first/a/b/...
  • 精确匹配
    • 给Route组件添加exact属性即可

下篇开始项目实战



喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

  • 计算机组成与体系结构:Snooping-Based Protocols(监听式协议)
  • 计算机的基本组成与性能
  • 【八股战神篇】MySQL高频面试题
  • 【Day29】
  • Muduo网络库大总结
  • C语言练手磨时间
  • 用算术右移实现逻辑右移及用逻辑右移实现算术右移
  • C++编程起步项目
  • golang 安装gin包、创建路由基本总结
  • 【架构美学】Java 访问者模式:解构数据与操作的双重分发哲学
  • tauri2项目使用sidcar嵌入可执行文件并使用命令行调用
  • [SpringBoot]Spring MVC(4.0)
  • elementUI 单选框存在多个互斥的选项中选择的场景
  • mongodb管理工具的使用
  • Selenium-Java版(css表达式)
  • 整理了 2009 - 2025 年的【199 管综真题 + 解析】PDF,全套共 34 份文件
  • Linux 安装 Unreal Engine
  • npm与pnpm--为什么推荐pnpm
  • DeepSeek系列大语言模型推理优化技术深度解析
  • 字符串相乘(43)
  • 国家统计局:消费对我国经济增长的拉动有望持续增长
  • 俄需要达成怎样的特别军事行动结果?普京:包含四个方面
  • 浙江美术馆馆长人民日报撰文:打开更辽阔的审美场域
  • 上海公办小学验证今起开始,下周一和周二分区进行民办摇号
  • 对谈|“大礼议”:嘉靖皇帝的礼法困境与权力博弈
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话