React路由拦截模式及withRouter示例详解
目录
- 一、路由拦截
- 二、路由模式
- 三、withRouter
一、路由拦截
在前面两篇 路由博客基础上,我们将ReactRouter.js
的我的profile
路由设置成路由拦截的:
<Route path="/profile" render={() => isAuth() ? <Profile/> : <Redirect to="/login"></Redirect> }></Route>
新建Login.js
组件,写入代码:
import React, { Component } from 'react' export default class Login extends Component { render() { return ( <div> <h2>Login</h2> <input type="text"></input> <button onClick={() => { localStorage.setItem('token', 123 ) this.props.history.push('/profile') }}>模拟登录</button> </div> ) } }
效果:
二、路由模式
之前带#
号的路由模式为哈西模式,如果想不带#
号的话,可以写成如下:
但是BrowserRouter
没有#
路径,后端如果没有对应的路径处理逻辑,就会404。
三、withRouter
如果我们在我的页面里面还有我的订单路由的话,那么在Profile.js
中写入跳转的语法:
import React from 'react' export default function Profile(props) { return ( <div> <h1>Profile</h1> <div onClick={() => { props.history.push('/profileorder') }}>我的订单</div> </div> ) }
可以看到报错了,那我们之前那种写法不生效了吗。其实跟路由的创建有关系,之前是直接将组件用component
属性直接传了过去,所以props
有history
对象,但是这次我们是采用的render
将组件在立即函数中实例化了,不传进去:
所以在这里props
接收不到任何东西,是非常正常的。在使用render
的路由时,我们可以这样传参:
通过传props
那么子组件中将有路由的一些属性,就可以做跳转。如果在路由组件上不传props
的话,那么将使用withRouter
进行跳转。将props
删除:
可以看到即使render
的路由父组件不传props
,我们使用withRouter
,也能够进行路由的跳转。
以上就是React路由拦截模式及withRouter示例详解的详细内容,更多关于React路由拦截模式withRouter的资料请关注我们其它相关文章!
相关推荐
-
ReactHooks批量更新state及获取路由参数示例解析
目录 一.如何批量更新 控制台输出 二.Hooks如何获取路由参数 执行效果 一.如何批量更新 在[Hooks]中如果单独的进行状态的更新可能会导致页面的多次渲染: import { useState } from 'react'; import { unstable_batchedUpdates } from 'react-dom';//批量更新状态时使用 import React from 'react'; const Example = () => { const [count, setC
-
React-Router6版本的更新引起的路由用法变化
目录 用法变化 替换为 嵌套路由 重定向 路由跳转 路由传参 search传参 动态路由传参 其他 总结 React Router应该是React生态系统中最受欢迎的库了,npm周下载量达600w+,github也有45.2k的加星,足以说明它是一款非常优秀的库,作为React社区重要的库,它经历了多次迭代和重大更改,就在上个月,更是迎来了一个大的正式版更新6.x,当前最新为6.0.2,相对比于之前的5.x版本做出了较大改变,不管从用法还是从性能上都有了明显的提升,本文也将用新老版本对比的方式让
-
React组件通信之路由传参(react-router-dom)
目录 最近在学习react,现在的工作中使用的是vue,在学习的过程中对两者进行比较,加深理解. 以下是react中的一小部分知识点,我个人觉得也是比较常用的知识点,react组件通信的其中一种方式--路由传参(react组件通信的方式有多种,如props.事件回调.context.router.redux.缓存等等).现在单页面SPA应用的比较广泛,在不刷新整个页面进行部分页面的跳转,使用路由跳转便在所难免,那么react路由除了进行页面之间的跳转,还有很大一个作用就是进行页面或者组件切换时传
-
react-router-domV6版本的路由和嵌套路由写法详解
目录 1-单级路由 2-嵌套路由(about路径进行嵌套) ReactRouterv6使用路由嵌套和重定向 1 - 单级路由 <NavLink to="/home">Home</NavLink> <NavLink to="/about">about</NavLink> <Routes> <Route path='/home' element={<Home/>}/> <R
-
react 路由Link配置详解
1.Link的to属性 (1)放置路由路径 (2)放置对象,且为规定格式 {pathname:"/xx",search:'?键值对',hash:"#xxx",state:{键值对}} 会自动将pathname.search.hash拼接在url路径上,state为传入的参数 可通过输出props查看对象内的信息 this.props.location.state.键名获取state内的数据 2.Link的replace属性 添加replace将跳转前的上一个页面替换
-
详解react-navigation6.x路由库的基本使用
目录 react-native项目初始化 安装react-native项目 react-navigation路由库安装 使用路由库 路由跳转与路由传参 设置路由标题 自定义标题组件 标题按钮 react-native项目初始化 打开cmd,cd到在要进行rn项目建立的文件夹. npx react-native init testRN 这里我的项目名设置为testRN,可以自行设定. 安装react-native项目 连接安卓虚拟机或者usb调试真机,cd进创建好的项目根目录,yarn andro
-
React路由拦截模式及withRouter示例详解
目录 一.路由拦截 二.路由模式 三.withRouter 一.路由拦截 在前面两篇 路由博客基础上,我们将ReactRouter.js的我的profile路由设置成路由拦截的: <Route path="/profile" render={() => isAuth() ? <Profile/> : <Redirect to="/login"></Redirect> }></Route> 新建Logi
-
React之错误边界 Error Boundaries示例详解
目录 引言 注意 实现 错误边界应该放置在哪? 未捕获错误(Uncaught Errors)该如何处理? 注意:自 React 15 的命名更改 引言 过去,组件内的代码异常会导致 React 的内部状态被破坏,产生可能无法追踪的错误.但 React 并没有提供一种优雅处理这些错误的方式,也无法从错误中恢复. 默认情况下,若一个组件在渲染期间(render)发生错误,会导致整个组件树全部被卸载,这当然不是我们期望的结果. 部分组件的错误不应该导致整个应用崩溃.为了解决这个问题,React 16
-
react中使用antd及immutable示例详解
目录 一.react中使用antd组件库 二.Immutable 2.1 深拷贝和浅拷贝的关系 2.2 immutable优化性能方式 2.3 immutable的Map使用 2.4 immutable的List使用 2.5 实际场景formJS 三.redux中使用immutable 一.react中使用antd组件库 运行命令create-react-app antd-react创建新项目: 运行命令npm i antd安装: 使用: import React from 'react' im
-
JavaScript设计模式之原型模式和适配器模式示例详解
目录 原型模式 原型模式介绍 代码实现 适配器模式 适配器模式介绍 代码实现 小结 原型模式 原型模式介绍 原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性 实现原型模式是在ECMAScript5中,提出的Object.create方法,使用现有的对象来提供新创建的对象的__proto__. 代码实现 var lynkCoPrototype = { model: "领克", get
-
Golang设计模式工厂模式实战写法示例详解
目录 拆出主板 工厂模式流程 代码实战 抽象能力,定义接口 实现工厂,支持注册和获取实现 主流程只依赖接口完成 扩展 => 适配器,实现接口 注册适配器到工厂里 小结 拆出主板 今天带大家看一下怎么用 Go 写工厂模式的代码,我们来学习一个实战案例.这个写法笔者日常经常使用,能够很有效地帮助大家实现 Separation of Concerns. 主板就是一个程序的主流程.比如我们要基于一份学习资料来消化,吸收知识.我们可能有下面几步流程: 准备好笔记本: 打开资料: 阅读资料内容,思考并记录关
-
React特征学习之Form格式示例详解
目录 Form 样式 React hook Form 样式 首先来看一个简单Form, 式样如下 import * as React from 'react'; const LoginForm = () => { return ( <form> <div> // Notice: 这里要用htmlFor,相当于id <label htmlFor="email">Email</label> <input id="emai
-
react 组件实现无缝轮播示例详解
目录 正文 无缝轮播 实现思路 构思使用时代码结构 Carousel组件 CarouselItem组件 完善组件 完成小圆点 正文 需求是做一个无缝轮播图,我说这不是有很多现成的轮子吗?后来了解到他有一个特殊的需求,他要求小圆点需要在轮播图外面,因为现在大部分插件都是将小圆点写在轮播图内部的,这对于不了解插件内部结构的小伙伴确实不知道如何修改. 很久没有写插件的我准备写一个插件(react) 无缝轮播 无缝轮播从最后一张到第一张的过程中不会原路返回,它就像轮子似的,从结束到开始是无缝连接的,非常
-
React.memo函数中的参数示例详解
目录 React.memo?这是个啥? React.memo的第一个参数 父组件 子组件 React.memo优化 React.memo的第二个参数 父组件 子组件 React.memo优化 父组件 子组件 小结 React.memo?这是个啥? 按照官方文档的解释: 如果你的函数组件在给定相同 props 的情况下渲染相同的结果,那么你可以通过将其包装在 React.memo 中调用,以此通过记忆组件渲染结果的方式来提高组件的性能表现.这意味着在这种情况下,React 将跳过渲染组件的操作并直
-
React元素与组件的区别示例详解
目录 从问题出发 元素与组件 元素 组件 问题如何解决 自定义内容 第一种实现方式 第二种实现方式 第三种实现方式 从问题出发 我被问过这样一个问题: 想要实现一个 useTitle 方法,具体使用示例如下: function Header() { const [Title, changeTitle] = useTitle(); return ( <div onClick={() => changeTitle('new title')}> <Title /> </div
-
React学习笔记之列表渲染示例详解
前言 本文主要给大家介绍了关于React列表渲染的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 示例详解: 列表渲染也很简单,利用map方法返回一个新的渲染列表即可,例如: const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((number) => <li>{number}</li> ); ReactDOM.render( <ul>{listItems}<
随机推荐
- Oracle中直方图对执行计划的影响详解
- Window10下安装 mysql5.7图文教程(解压版)
- web开发之对比时间大小的工具函数的实例详解
- 利用webqq协议使用python登录qq发消息源码参考
- 关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
- php生成数字字母的验证码图片
- PHP多态代码实例
- python 切片和range()用法说明
- Android百度地图自定义公交路线导航
- IE8 新增的Javascript 开发接口说明
- js出生日期 年月日级联菜单示例代码
- 谈PHP生成静态页面分析 模板+缓存+写文件
- js调试工具 Javascript Debug Toolkit 2.0.0版本发布
- Android设置铃声实现代码
- php中如何使对象可以像数组一样进行foreach循环
- jquery js 获取时间差、时间格式具体代码
- JavaScript通过事件代理高亮显示表格行的方法
- spring boot 1.5.4 web容器定制(端口号等修改)方法
- 实例讲解C++编程中对设计模式中的原型模式的使用
- JAVA实现基于Tcp协议的简单Socket通信实例