React-Router 5.0 制作导航栏+页面参数传递

这篇具有很好参考价值的文章主要介绍了React-Router 5.0 制作导航栏+页面参数传递。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React使用路由

使用React构建SPA应用(单页面应用),要想实现页面间的跳转,首先想到的就是使用路由。在React中,常用的有两个包可以实现这个需求,那就是react-routerreact-router-dom。本文主要针对react-router-dom进行说明。

众所周知,JSDOM BOM ECMAScript 组成, React-Router-Dom 使用 BOM 提供的 history API

React-Router-Dom有两种路由方式 HashRouterBrowserRouter

  • HashRouter特点 在URL中采用#号来作为当前视图的地址,改变#号后的参数,页面并不会重载
  • BrowserRouter特点 和正常浏览网易url类似 页面并不会重载

React-Router-Dom 导航实现

管他三七二十一 先安装再说: yarn add react-router-dom

在使用React-Router-DomAPI之前 需要使用BrowserRouterHashRouter包裹住

// 将路由定义为根组件
import {BrowserRouter, HashRouter as Router} from 'react-router-dom';

ReactDOM.render(
    <Router>
        <App />
    </Router>
, document.getElementById('root'));

// 然后定义路由
 <Switch>
      <Route exact path="/组件1" component={组件1} />
      <Route path="/组件2" component={组件2} />
      <Route path="/组件3">
            <组件3 />
      </Route>
      <Route render={(props) => {
            return (
                <div>
                    Router Not Found~ 404
                </div>
            );
      }} />      
</Switch>

// 导航实现
<NavLink to="/组件1" activeStyle={activeStyle}>组件1</NavLink>
<NavLink to="/组件2" activeStyle={activeStyle}>组件2</NavLink>
<Link to="/组件3" activeStyle={activeStyle}>组件3</Link>

以上代码已经实现了一个基本的导航

示例:

React-Router 5.0 制作导航栏+页面参数传递

导航代码剖析

BrowserRouterHashRouter已经介绍过了 两种url不同的展现形式
定义路由时使用了三种不同的方式:

  • 指定component对应的组件
  • 将组件作为子组件
  • router指定render函数。返回一个组件

几种声明方式的区别:

  • 第一种直接指定是比较常见的 这样会将history对象直接注入到组件的props
  • 第二种是路由跳转过去只展示对应组件 props里面不存在history对象 如果想使用history对象的需要使用withRouter这个高阶函数 进行history注入
  • 第三种可以直接传入props 直接拥有history对象 比较方便

Switch组件:
类似于编程语言的条件控制语句,匹配到一个Route就不会往下匹配了

Route组件:
如果Route没用指定path 只要匹配不到path的都会渲染这个组件 可以用这个增加用户体验 实现一个友好404页面

exact属性 严格匹配路由 防止 /one 匹配到 /one/two这个路由 因为路由的匹配顺序是至上而下 定义两个路由如果 /one/two 在前面的话 不使用严格匹配则不会返回预期结果

  • NavLink 和Link
    这两个组件都是对 <a href="">A链接</a> 的一种封装 但是使用场景不太一样
    如果选择导航栏的时候使用NavLink非常合适 因为他直接提供activeStyle等属性 直接聚焦在这个组件上时style会应用给组件

Link一般作用于跳转到其他页面 实则就是A链接

React-Router-Dom 页面跳转参数传递

主要就是使用history对象进行页面跳转

API介绍:

  • history.goBack() 返回上一页
  • history.replace() 在有些场景下面 重复使用push 或者 a标签会产生死循环 为了避免这种情况发生 在可能出现死循环的地方使用replace方式来跳转
  • history.push() 进入新页面

页面参数传递

  • 第一种
    // 隐示传参
    传递
    props.history.push(`/test`, {
                name: 'sb'
            });
    获取
    props.location.state        
  • 第二种
    传递
    props.history.push({
                pathname: '/test',
                query: {
                    id: 1
                }
            });
    获取
    props.location.query       
  • 第三种
    传递
    props.history.push('/about/1');
    获取
    props.match.params 
    
    
    或者
    props.history.push('/about?id=1');
    获取
    props.location.search

示例:

React-Router 5.0 制作导航栏+页面参数传递

React-Router 5.0 制作导航栏+页面参数传递

代码

React-Router 5.0 制作导航栏+页面参数传递

React-Router 5.0 制作导航栏+页面参数传递

常用API

  • HashRouter 浏览器会在路由砂锅出现#号字样 (一般会当成根组件使用)
  • BrowserRouter 浏览器路由正常显示 (一般会当成根组件使用)
  • Link 对a标签的一个封装
  • to属性对应的值可以是字符串 也可以是location对象 一般作用于做跳转
  • NavLink 一般作用于做导航 可以控制选中之后的样式
  • Redirect 重定向跳转
  • Route 路由分配 哪个path对应哪个路由
  • exact 严格匹配
  • component 指定渲染的组件
  • Prompt 确定是否离开当前页面提示 监听离开事件

HOOKs 对于函数组件的一些history操作

  • useRouteMatch()
  • useParams()

来源参考:憧憬在 aoppp.com发布文章来源地址https://www.toymoban.com/news/detail-478337.html

到了这里,关于React-Router 5.0 制作导航栏+页面参数传递的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【React】react-router 路由详解

    🚩🚩🚩 💎个人主页: 阿选不出来 💨💨💨 💎个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. 💨💨💨 💎目前开发的专栏: JS 🍭Vue🍭React🍭 💨💨💨 前端路由就是把不同路由对应不同的内容或页面的任务交给前端来做,根据不同的url地

    2024年02月01日
    浏览(30)
  • React-Router路由基础篇(简单易学)

    文章目录 系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 (

    2024年04月14日
    浏览(29)
  • React-学习笔记(8—react-router@5 and @6)

    目录 1、react-router@5 1-1、在项目中安装路由 1-2、一个项目使用一个路由器来管理路由即可 1-3、 路由组件和一般组件的区别 1-4、使用 NavLink 1-5、封装 NavLink —— MyNavLink 1-6、使用 Switch 标签 1-7、BrowserRouter解决多级路径匹配样式丢失问题 1-8、路由的模糊匹配和严格匹配 1-9、路

    2024年02月12日
    浏览(32)
  • 【前端知识】React 基础巩固(三十九)——React-Router的基本使用

    Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号) 尝试在项目中使用HashRouter: 安装Router 在 index.js 中引入并使用HashRouter Routes:包裹所有的Route,在其中匹配一个路由(

    2024年02月14日
    浏览(46)
  • 一文了解 history 和 react-router 的实现原理

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。 本文作者:霜序 在前一篇文章中,我们详细的说了 react-router@3.x 升级到 @6.x 需要注意的问题以及变更的使用方式。 react-router 版本更新

    2024年02月12日
    浏览(26)
  • <React-Router>超全react路由知识点(跳转、传参、子路由、重定向等)

    目录 一、路由环境配置 1.搭建一个项目名为boke(自定义),编辑文档语言为TypeScript的项目环境。 2.安装所有package.json中的依赖----安装包(注意要【cd 项目名】进入项目文件安装) 3.添加React-Router路由 4.文件、目录相关修改与搭建 二、路由的懒加载  三、路由跳转 1.标签跳转(

    2024年02月11日
    浏览(37)
  • 创建react脚手架项目——demo(react18 + react-router 6)+ react项目打包部署

    全局安装 create-react-app 说明:不建议安装全局,建议使用 npx 命令安装,具体可参考官网,如下: 官网: https://zh-hans.legacy.reactjs.org/docs/create-a-new-react-app.html. 1.2.1 问题1——npm ERR! code ENOTFOUND(网络问题clashx) 问题描述,如下: 解决问题——方式1 如果使用了clashx,可能是它

    2024年02月07日
    浏览(50)
  • 【退役之重学前端】使用vite+vue3+vue-router,重构react+react-router前后端分离的商城后台管理系统

    前言: 对前端各个技术板块,HTML、CSS、JavaScript、ES6、vue家族,整体上能“摸其大概”。笔者计划重构一个基于react的商城后台管理系统。 —— 2024年2月16日 vue3 sass bootstrap ES7 前后端分离 分层架构 模块化开发 npm vite git

    2024年02月20日
    浏览(42)
  • react自定义组件间的传值,if..else..判断,for循环(嵌套map使用),点击事件(Onclick),页面上事件实事传递参数(基础版)

    9.自定义组件间的传值 10.if..else..判断 11.for循环(嵌套map使用) 12.点击事件(Onclick) 13.页面上事件实事传递参数 14.关于export default function App()与export function App()的区别    export default不需要{}      import  Gallery from \\\'./Gallery.js\\\';    export function需要{}       import {Gallery} from \\\'./Galler

    2024年01月17日
    浏览(32)
  • React Router 中的路由导航方法:push() 和 replace() 详解

    在 React Router 中, this.props.history.push() 和 this.props.history.replace() 是用于编程式导航的两个常用方法。它们允许我们在组件中动态地更改路由,并可选地传递状态参数。本文将介绍这两个方法的用法和区别。 push() 方法将在导航时创建一个新的历史记录条目,并将用户重定向到新

    2024年03月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包