Router 的基本使用!

我们需要npm 下载react-router:

npm install react-router --save

BrowserRouter或HashRouter

  • Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件;
  • BrowserRouter使用history模式;
  • HashRouter使用hash模式;

Link和NavLink

  • 通常路径的跳转是使用Link组件,最终会被渲染成a元素;
  • 是在Link基础上增加了一些样式属性;
  • Link中最重要的属性,用于设置跳转到的路径;

Route

  • Route用于路径的匹配;
  • path属性:用于设置匹配到的路径;
  • element属性:设置匹配到路径后,渲染的组件;
  • exact:精准匹配,只有精准匹配到完全一致的路径,才会渲染对应的组件;

创建第一个路由:
要使用react-router 创建第一个路由 首先我们需要在 总入口文件里引入:

import { BrowserRouter } from 'react-router-dom'  //引入react-router-dom模块包  包裹根目录AppReactDOM.render(<React.StrictMode><BrowserRouter><App /></BrowserRouter></React.StrictMode>,document.getElementById('root')
);

这是从 react-router-dom 库导入的第一个组件。它用于包装不同的路线,它使用HTML5 history API来跟踪React应用程序中的路由历史记录。

之后我们在 App.js 文件里 引用该下列方法:
我们需要 使用Routes 包裹住Route 来注册路由
Route 里面path属性是路径,element是该路径所对应的组件。

//引入Routes包裹Route  Route设置路由  Link跳转路径,相当于a标签
import { Routes, Route, Link, NavLink } from 'react-router-dom'function App() {return (<div className="App"><Routes>{/* 通过定义route内的path和element,确定每一个路径path对应的组件element */}<Route path='/' element={<Home />} /<Route path='/newone' element={<Newone />} />{/* 如果路径地址不存在的话 */}<Route path='*' element={<NotFound />} /><Route path='/about' element={<About />}>{/* 默认路由 */}<Route path='' element={<Dz />} />{/* 二级路由 about的子路由 */}<Route path='/about/address' element={<Dz />} /><Route path='/about/yhq' element={<Yhq />} />{/* 如果路径地址不存在的话 */}<Route path='*' element={<NotFound />} /></Route></Routes></div>);
}export default App;

下面使用 NavLink 进行一个跳转 相当于a标签:

<NavLink to="/">首页</NavLink>
<NavLink to="/about">about页</NavLink>

跳转路由:
当然,我们也可以跳转路由,但是我们react 不想vue那样使用 push,go,replace进行一个跳转;
我们需要 引入 useNavigate 方法,注意 我们这里使用这些api方法,必须在函数式组件内使用;
请看以下代码片段:

//跳转路由
import { useNavigate } from 'react-router-dom'function Home() {//使用引入的useNavigate方法  声明一个对象let navigate = useNavigate()return (<div>我是home组件{/* 跳转路由的按钮 */}<input type="button" value="跳转about组件" onClick={() => { navigate('/about') }} /></div>)}
export default Home;

React中的路由react-router相关推荐

  1. 25、react 中使用路由 router 详解

    react 中使用路由 router 详解 今天开始最新的一个模块,也是 react 开发中最重要的一部分,就是路由. SPA 理解 我们使用原生的 HTML + CSS + JavaScript 开 ...

  2. react中函数式组件React Hooks

    React Hooks 函数式组件 使用hooks理由 高阶组件为了复用,导致代码层级复杂 生命周期的复杂 写成functional组件,无状态组件,因为需要状态,又改成了class,成本高 在16. ...

  3. react中html转换,React中的HTML转义写法

    在JSX中输出固定内容 直接使用UTF-8字符 {代码...} 使用HTML转义字符 {代码...} 或者十进制的转义字符 {代码...} 动态内容的转义 但是如果在外面加一层大括号的话,react为 ...

  4. React动画和路由

    1.过渡动画 React并没有提供过渡动画操作,组件的过渡动画需要依赖第三方模块:transition 安装 yarn add react-transition-group 单元素过渡动画 impor ...

  5. React中添加class——借助第三方库classnames

    一.vue中添加class vue中添加class是一件非常简单的事情: 你可以通过传入一个对象: 你也可以传入一个数组: 甚至是对象和数组混合使用: 二.React中添加class React在JS ...

  6. React中diff算法的理解

    React中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DO ...

  7. React 中constructor 作用

    React 中constructor 作用 react中的constructor大体有两个作用 1.初始化this.state 2.纠正方法的this的指向 constructor(props) {s ...

  8. React学习(十)-React中编写样式CSS(styled-components)

    虽互不曾谋面,但希望能和你成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 撰文 | 川川 VX-ID:suibichuanji 点 ...

  9. React学习(九)-React中发送Ajax请求以及Mock数据

    虽互不曾谋面,但希望能和你成为笔尖下的朋友 以读书,技术,生活为主,偶尔撒点鸡汤 不作,不敷衍,意在真诚吐露,用心分享 点击左上方,可关注本刊 撰文 | 川川 VX-ID:suibichuanji 点 ...

最新文章

  1. boost::polygon模块实现多边形间隔相关的测试程序
  2. 利用SharedPreferences完成记住账号密码的功能
  3. HttpClient 4 API –获取状态码-getStatusLine()。getStatusCode()示例
  4. linux查看openssh和openssl版本命令
  5. python 字符串首字母_如何将string(Python)中每个单词的首字母大写?
  6. 【ACDU推荐好文】手把手教你 DBCA 搭建 Oracle ADG
  7. 将一个类改成线程_看了这个有趣的例子,相信你就秒懂多线程同步了
  8. 异常处理第一讲(SEH),筛选器异常,以及__asm的扩展,寄存器注入简介
  9. 自然数之和(leetcode 167)
  10. js读取json数据(php传值给js)
  11. java txt转pdf乱码_java转pdf中文乱码应该如何处理
  12. 对LFW数据库的翻译【1】
  13. 计算机专业复试面试题难吗,计算机考研复试,别想的太难了!
  14. 使用pdfFactory Pro虚拟打印机给文档加上水印
  15. 欢迎使用CSDN-markdown编辑器11345
  16. 7款英文语法检查工具推荐
  17. excel合并sheet表格
  18. 怎么把文件发给商家打印?如何给商家发送需打印的文件
  19. 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation
  20. js实现表单及时验证功能 用户信息立即验证

热门文章

  1. 残缺棋盘的伪代码_伪激光雷达:无人驾驶的立体视觉
  2. word置顶_小鱼便签怎么设置置顶
  3. java web 使用https_如何在Web应用程序中实现HTTPS登录页面?
  4. linux 新增网络接口,为网络接口添加多IP - CentOS 7系统配置上的变化解析_Linux教程_Linux公社-Linux系统门户网站...
  5. 图说数据中心新风节能技术
  6. 为什么要完成量子计算机,我们为啥要量子计算机?
  7. linux文件拷贝函数,linux:文件操作函数(open,close,read,write)
  8. Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示
  9. Arrays中sort部分源码阅读
  10. 为CDH 5.7集群添加Kerberos身份验证及Sentry权限控制