React 路由使用的基本

废话不多说 直接上步骤

基础步骤

第一步

安装包。

npm i react-router-dom@5.3.0

这个包提供了三个核心的组件:HashRouter, Route, Link

(上个月刚刚出了6.0还不是很稳定,稳定了再用哈)

第二步 

导入包,并使用。

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

第三步

使用Link指定导航链接

使用Route指定路由规则(哪个路径展示哪个组件)

路由三大对象之-Router

Router 组件:包裹整个应用,一个 React 应用只需要使用一次  

俩种常用Router:  HashRouterBrowserRouter(推荐)

HashRouter:

使用 URL 的哈希值实现

原理:监听 window 的 hashchange 事件来实现的

BrowserRouter:

使用 H5 的 history.pushState() API 实现

原理:监听 window 的 popstate 事件来实现的

路由三大对象之-Link 

Link:指定导航链接 常用有Link与NavLink

Link:

Link组件最终会渲染成a标签,用于指定路由导航

  • to属性,将来会渲染成a标签的href属性

  • Link组件无法展示哪个link处于选中的效果

NavLink:

NavLink组件,一个更特殊的Link组件,可以用用于指定当前导航高亮,选中项默认自带active类名

  • to属性,用于指定地址,会渲染成a标签的href属性

  • activeClassName: 用于指定高亮的类名,默认active。一般不去修改。

  • exact: 精确匹配,表示必须地址栏和to的属性值 精确匹配类名才生效

路由三大对象之-Route

决定路由匹配规则

格式:<Route path="/xx/xx" component={组件}></Route>

匹配规则

名词约定:

  1. path: Route组件中path属性的值

  2. path的值: 指的如下格式

    1. link组件中to的属性值

    2. 地址栏中的地址

模糊匹配规则

  1. 只要pathname以path开头就算匹配成功

  2. 匹配成功就加载对应组件;

  3. 整个匹配过程是逐一匹配,一个匹配成功了,并不会停止匹配

模糊匹配和精确匹配

  1. 默认是模糊匹配的

  2. 补充exact可以设置成精确匹配

Switch

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

处理404页

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

页面跳转 Redirect

页面跳转

格式

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

当匹配到"/"时 自动匹配到 "/comment"

示例

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'
import Page404 from './Page404'
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} />
          <Route component={Page404} /> //兜底
        </Switch>
      </Router>
    </div>
  )
}
ReactDom.render(<App />, document.getElementById('root'))

 

编程式导航

编程式导航的格式

 第一步 

import {useHistory} from 'react-router'

第二步注册 

const history = useHistory()

第三步使用 与vue一般无二

 history.push('/find')

 示例

import {useHistory} from 'react-router' 

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

嵌套路由的配置

就是在组件中把上面我说的在来一套但是记住Router不用在写了 

路由注意点 

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

注意 exact 使用

执行过程

  1. 点击 Link 组件(a标签),修改了浏览器地址栏中的 url

  2. React 路由监听到地址栏 url 的变化 hashChange popState

  3. React 路由内部遍历所有 Route 组件,使用路由规则(path)与 pathname(hash)进行匹配

  4. 当路由规则(path)能够匹配地址栏中的 pathname(hash) 时,就展示该 Route 组件的内容

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值