react-router-dom学习及案例

React Router DOM详解
本文深入讲解React Router DOM的三大核心组件:Router、Route和Link,介绍如何使用它们进行路由匹配和组件展示。同时,涵盖了HashRouter、BrowserRouter等不同类型的路由器组件,以及如何通过history API实现路由切换。

react-router-dom学习

三大核心

  • Router 所有组件共用的最外层
  • Route 路由规则匹配,并显示当前规则匹配到的组件
  • Link 路由的跳转组件,会渲染为a标签【通过this.props.history.push(path)来改变HashRouter中的pathname属性,进而驱动Route们进行重新渲染,匹配路由实现路由切换】

其他

  • HashRouter url为hash的路由,原理是window.location.hash
  • BrowserRouter 浏览器的路由组件
  • MeroryRouter 内存路由组件
  • NativeRouter native的路由组件
  • StaticRouter 地址不变的路由组件

具体操作

  1. 下载
使用npm
npm install react-router-dom //或者 cnpm install react-router-dom
使用yarn
yarn add react-router-dom //或者 tyarn add react-router-dom
  1. 使用

router.js 【exact为精准匹配】

import React from 'react'
import {HashRouter, Route, Switch} from 'react-router-dom' 

 import Login from '../pages/login';//登陆页面
 import Home from '../pages/home';//首页

const BaseRoute = () => {
  return (
    <HashRouter>
      <Switch>
        <Route path="/" exact key="home" component={Home}/>
        <Route path="/home" exact key="home" component={Home}/>
        <Route path="/login" exact key="login" component={Login}/>
      </Switch>
    </HashRouter>
  )
};
export default BaseRoute;

index.js

import React from 'react';
import ReactDOM from 'react-dom'; 
import BaseRoute from './router'

ReactDOM.render(
  <React.StrictMode>
    <BaseRoute/>
  </React.StrictMode>,
  document.getElementById('root')
);

home.js

import React,{Component} from 'react'

class Home extends Component{
  optionTo(){
	this.props.history.push('/login')
  }
  render(){
    return (
      <div>
      我是首页
      <p onClick={this.optionTo.bind(this)}>点我去登陆</p>
      </div>
    )
  }
}
export default Home;

login.js

import React,{Component} from 'react'

class Login extends Component{
  render(){
    return (
      <div>
        我是登陆页
        
      </div>
    )
  }
}
export default Login;
### react-router-dom 中 Outlet 组件的使用 在 `react-router-dom` 版本 6 及以上版本中,`<Outlet>` 是一个非常重要的组件,用于渲染嵌套路径下的子路由匹配到的内容。当定义了一组父级 `<Route>` 和多个子级 `<Route>` 后,在父级组件内放置 `<Outlet>` 来指定子路由内容应该被展示的位置。 #### 使用场景说明 如果存在多层结构的应用程序布局设计,则可以通过设置带有索引或具体名称的子路由,并通过 `<Outlet/>` 实现这些子页面的具体显示逻辑[^2]。 #### 示例代码 下面给出一段简单的例子来解释如何利用此特性构建具有共享头部和底部区域的应用界面: ```jsx // 导入必要的模块 import React from 'react'; import { BrowserRouter as Router, Routes, Route, Link, Outlet } from "react-router-dom"; function AppLayout() { return ( <> <header> {/* 这里可以放一些全局性的导航链接 */} <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/about">About Us</Link></li> </ul> </nav> </header> <main> {/* 子路由视图将会在这里呈现 */} <Outlet /> </main> <footer>© My Company</footer> </> ); } function App() { return ( <Router> <Routes> <Route path="/" element={<AppLayout />}> <Route index element={<HomePage />} /> <Route path="about" element={<AboutPage />} /> </Route> </Routes> </Router> ); } ``` 在这个案例中,无论用户访问的是根路径 `/` 或者 `/about` ,都会看到相同的 header 和 footer 部分;而中间 main 区域则会依据实际请求的不同 URL 显示相应的页面内容。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值