React-Router-基本使用

简介: React-Router-基本使用

什么是路由


路由维护了 URL 地址和组件的映射关系, 通过这个映射关系, 我们就可以根据不同的 URL 地址,去渲染不同的组件。



React 中使用路由


  • 安装 react-router
npm install react-router-dom

通过指定监听模式:

BrowserRouter 和 HashRouter 的作用:

Link 的作用:

  • 用于修改 URL 的资源地址

Route 的作用:

  • 用于维护 URL 和组件之间的关系
  • Route 是一个占用组件, 将来它会根据匹配到的资源地址渲染对应的组件




案例


需求,界面上有两个按钮, 点击不同按钮显示不同组件:


在看如上的这个特性之前首先降低一下 React 的版本,这里博主介绍的不是 React 最新版本的语法,关于 React 后面更新的版本后面在更新,运行如下执行:

npm install --save react@16.12.0 react-dom@16.12.0


更改 index.js:

import ReactDOM from 'react-dom';
import React from 'react';
import App from './App';
ReactDOM.render(<App/>, document.getElementById('root'));


App.js:

import React from 'react';
import Home from './components/Home'
import About from './components/About'
import {BrowserRouter, HashRouter, Link, Route, Routes} from 'react-router-dom';
class App extends React.PureComponent {
    render() {
        return (
            <div>
                <HashRouter>
                    <Link to={'/home'}>Home</Link>
                    <Link to={'/about'}>About</Link>
                    <Routes>
                        <Route path="/" element={<Home/>}/>
                        <Route path="home" element={<Home/>}/>
                        <Route path="about" element={<About/>}/>
                    </Routes>
                </HashRouter>
            </div>
        )
    }
}
export default App;


About.js:

import React from 'react';
class About extends React.PureComponent {
    render() {
        return (
            <div>About</div>
        )
    }
}
export default About;


Home.js:

import React from 'react';
class Home extends React.PureComponent {
    render() {
        return (
            <div>Home</div>
        )
    }
}
export default Home;

在 V5 与 V6 它们之间的写法还是有更改的,具体的更改内容参考:https://www.querythreads.com/error-error-a-route-is-only-ever-to-be-used-as-the-child-of-routes-element/

官网文档地址: https://reactrouter.com/web/guides/quick-start




React 路由注意点


  • react-router4 之前, 所有路由代码都是统一放到 react-router 中管理的
  • react-router4 开始, 拆分为了两个包 react-router-dom 和 react-router-native
  • react-router-dom 是在浏览器中使用路由
  • react-router-native 是在原生应用中使用的路由(IOS, 安卓)
  • BrowserRouter history 模式使用的是 H5 的特性, 所以兼容性会比 HashRouter hash 模式差一些
  • 在企业开发中如果不需要兼容低级版本浏览器, 建议使用 BrowserRouter
  • 如果需要兼容低级版本浏览器, 那么只能使用 HashRouter
  • 无论是 Link 还是 Route 都只能放到 BrowserRouter 和 HashRouter 中才有效(放在之外就会无效)




Route 注意点^Route注意点


  • 默认情况下 Route 在匹配资源地址时, 是 模糊 匹配
  • 如果必须和资源地址一模一样才匹配, 那么需要添加 exact 属性, 开启 精准 匹配
  • Route 在匹配路由的时候, 是利用当前资源地址从左至右的和 path 中的地址进行匹配的
  • 只要当前资源地址从左至右完整的包含了 path 中的地址那么就认为匹配成功了

当前资源地址:/home/about

  • path 中的地址: /home
  • path 中的地址: /home/about

模糊匹配:

App.js:

import React from 'react';
import Home from './components/Home'
import About from './components/About'
import {BrowserRouter, Link, Route} from 'react-router-dom';
class App extends React.PureComponent {
    render() {
        return (
            <div>
                <BrowserRouter>
                    <Link to={'/home'}>Home</Link>
                    <Link to={'/home/about'}>About</Link>
                    <Route path="/home" component={Home}/>
                    <Route path="/home/about" component={About}/>
                </BrowserRouter>
            </div>
        )
    }
}
export default App;

精准匹配:


App.js:

import React from 'react';
import Home from './components/Home'
import About from './components/About'
import {BrowserRouter, Link, Route} from 'react-router-dom';
class App extends React.PureComponent {
    render() {
        return (
            <div>
                <BrowserRouter>
                    <Link to={'/home'}>Home</Link>
                    <Link to={'/home/about'}>About</Link>
                    <Route exact path="/home" component={Home}/>
                    <Route exact path="/home/about" component={About}/>
                </BrowserRouter>
            </div>
        )
    }
}
export default App;




Link 注意点


  • 默认情况下 Link 会渲染成一个 a 标签
  • 如果想渲染成其他的元素, 可以通过手动路由跳转来实现(后续文章嵌套路由在介绍)




NavLink


除了 Link 可以修改资源地址外,还可以通过 NavLink 修改,也是可以的。


NavLink 注意点:

  • NavLink 在匹配路由的时候, 是利用当前资源地址从左至右的和 path 中的地址进行匹配的
  • 只要当前资源地址从左至右完整的包含了 path 中的地址那么就认为匹配
  • 默认情况下 NavLink 在匹配资源地址时, 是模糊匹配
  • 如果必须和资源地址一模一样才匹配, 那么需要添加 exact 属性, 开启精准匹配

当前资源地址: /home/about

  • to 中的地址: /home
  • to 中的地址: /home/about

关于 NavLink 更多的 Api 可去官方文档进行查看:

如上图中的我所标记出来的一个属性是设置选中激活状态下的样式,如果是模糊匹配出现的效果就是其它的 Link 状态链接的样式也会进行更改,需要设置为精确匹配才可以达到点击那个就是那个链接的样式改变的效果。


也就是说,在浏览器的路径当中如果是 home/about 下方页面,会渲染出两个组件分别是 home 与 about 组件。但是在 v5 与 v6 好像 React 已经做出了改动特性与语法会有所不同,本篇文章到此为止就差不多就如上这些内容了,其它的内容我会再起一篇文章继续介绍。


^Route注意点: NavLink 注意点与 Route 同理


最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关文章
|
6月前
|
存储 前端开发 JavaScript
第三十章 React的路由基本使用
第三十章 React的路由基本使用
|
资源调度 前端开发 JavaScript
React Router 6 (React路由) 最详细教程
React Router** 经历多个版本的发展,现在已经到了 **React Router 6**。虽然网络上写 React-Router 路由本身的教程很多,但真正讲到 React-Router 6 的并不多。同时因为第 6 版引入了很多新的概念,以及大量使用 Hook,因此网上的很多旧教程已经不实用了。
2746 0
|
2月前
|
前端开发 程序员 API
React技术栈-React路由插件之react-router的基本使用
这篇博客介绍了React路由插件react-router的基本使用,包括其概念、API、以及如何通过实战案例在React应用中实现SPA(单页Web应用)的路由管理。
68 9
|
3月前
|
移动开发 API UED
React-Router 基础学习
React-Router 基础学习
34 0
|
前端开发
【react 中router v6 与 v5 区别】
【react 中router v6 与 v5 区别】
|
前端开发 JavaScript API
react-router与react-router-dom区别
React 是一个流行的JavaScript库,用于构建用户界面,而`React Router`是为 React 应用程序提供路由功能的常用解决方案之一。 React Router是一个用于构建路由的库,它提供了核心的API,例如`Router`、`Route`和`Switch`。它允许开发者将不同的组件与特定的URL路径相关联,并根据用户的导航选择加载相应的组件。React Router通过管理URL的变化,帮助我们在单页应用程序中实现导航和路由。 然而,React Router本身并没有提供直接操作DOM进行路由跳转的API。这就是`React Router DOM`的出现背景。
310 0
|
前端开发 网络架构 UED
React Router
React Router
107 0
|
前端开发 网络架构
React学习笔记(七) React Router
React学习笔记(七) React Router
89 0
|
移动开发 前端开发 API
React-Router 5 快速上手
大家好,我是 CoderBin,本文将给大家分享关于react-router5的相关内容,如果文中有任何不对的地方欢迎在评论区留言指正,如果对同学们有帮助的欢迎点赞收藏,你们的支持就是我最大的动力,谢谢🌻
140 1
React-Router 5 快速上手