react-router 4.0 升级攻略
react-router 4.0 出来好9了,项目在4月份的时候对react-router进行了升级,升级耗费了3天,一个坑一个坑踩了过来。
按照公司项目情况说下升级改了哪些,项目使用的是hashHistory,(BrowserHistory 的情况就不清楚了)
中文文档 https://reacttraining.cn/ 好像https签名出问题了,打不开,可以 gtihub项目 下载在,npm 安装 start下
1. package.json 配置修改
"react-router": "4.1.1",
"react-router-dom": "4.1.1",
2. Router.jsx 修改
原来的是这个样子的

现在的样子

a.文档中比较多的例子直接使用 HashRouter 对象,但是在使用的时候有些问题,见下面介绍,所以用了<Router history={hashHistory}>,是自己创建的一个history模块https://github.com/ReactTraining/history的实例hashHistory
b.Switch 组件,Route组件
Route组件的exact 属性--------要求路径与location.pathname必须 完全 匹配,在项目中有exact==false情况是,路由里面嵌套了子路由切换逻辑https://reacttraining.com/react-router/web/api/Route/exact-bool
3.loctaion对象获取与withRouter https://reacttraining.com/react-router/web/api/withRouter
原来的是这个样子的
原来都是在顶层 Route 的 设置的component 组件往下面传递的, withRouter 也可以的2.0已经有了
现在的样子
通过withRouter函数包装下,在支持ES7装饰器的环境中,可以直接通过@withRouter,还能在props上获取别的对象 const { match, location, history } = this.props

location.query属性没有了,现在通过 'query-string' 模块进行转换获取

4.页面离开,路由变化的时候的提示功能 Prompt 组件 https://reacttraining.com/react-router/core/api/Prompt
原来的是这个样子的
这个写法有很多种,项目中采用的例子1中的代码,在Route组件中设置onChange时间进行处理,但是维护性上面的确有点问题
a.离开检测的添加 和 业务store比较远,不利于管理,当然可以通过全局store处理下
b.离开检测,还需要判断下当前路由是不是符合当前store的路由, 再进行离开数据变化判断,实现比较丑
现在的样子

问题 a. 原始的没找到支持Promise对象的方式, 一般提示都是异步的,根据用户点的进行操作不同的操作
b. 原来的业务都是在Promise成功后,进行变化标志位重置,现在不支持,标志重置就需要在组件componentWillUnmount,componentWillReceiveProps中进行处理
当然也可以这样写,由于项目采用的mobx-react做的状态管理,所以,上面的方式能够减少组件的依赖,减少render

5.matchPath 方法,页面菜单选中,通过 matchPath 进行判断,当然自己处理也可以

6.hashHistory对象的创建

HashRouter 可以自己定义 getUserConfirmation,应该就是history模块的 getUserConfirmation
下面的代码是让push,replace 支持params, 原来并不支持,导致 search字符串会很长,代码很难维护
单独创建hashHistory对象,带来的好处是,
在一些store需要跳转的地方,原来是通过 import { hashHistory } from 'react-router'; 获取的,直接 hashHistory.push()
4.0中没有了,需要通过location.history获取,这样就会要改很多,需要location传入store,并且对应的组件大部分需要withRouter, 来获取location
react-router 4.0 升级攻略的更多相关文章
- react router 4.0以上的路由应用
thead>tr>th{padding:8px;line-height:1.4285714;border-top:1px solid #ddd}.table>thead>tr& ...
- React Router 4.0 实现路由守卫
在使用 Vue 或者 Angular 的时候,框架提供了路由守卫功能,用来在进入某个路有前进行一些校验工作,如果校验失败,就跳转到 404 或者登陆页面,比如 Vue 中的 beforeEnter 函 ...
- 初步学习React Router 4.0
React Router 4.0 是react官方推荐的路由库.4是已经正式发布的最新版本. 初始化项目启动之后: npm run eject 弹出配置文件.自定义配置webpack 查看下pac ...
- React Router 4.0 + webpack 实现组件按需加载
网上关于React Router 4.0的按需加载文章有很多,大致的思路都一样,但是其实具体实现起来却要根据自己的实际情况来定,这里主要介绍一下我的实现方式. 主要方式是通过Route组件的rende ...
- React Router 4.0 体验
React Router 4.0 (以下简称 RR4) 已经正式发布,它遵循React的设计理念,即万物皆组件.所以 RR4 只是一堆 提供了导航功能的组件(还有若干对象和方法),具有声明式(声明式编 ...
- React Router V4.0学习笔记
最近在学习React Router,但是网站的教程多半还是3.X版本之前的,所以我只能在GitHub上找到React Router的官方文档在读.后来总结了一下,包括学习经验以及V3.X与V4.X的差 ...
- React Router 4.0 基本使用
路由的概念,起初来源于服务端,就是当浏览器访问一个网站的不同页面时,服务端能够正确的返回页面的内容.当访问首页时,它能返回首页的内容,访问关于我们页面时,返回关于我们的内容.可以看到路由就是一种控制和 ...
- React Router 4.0 ---- 嵌套路由和动态路由
嵌套路由,从广义上来说,分为两种情况:一种是每个路由到的组件都有共有的内容,这时把共有的内容抽离成一个组件,变化的内容也是一个组件,两种组件组合嵌套,形成一个新的组件.另一种是子路由,路由到的组件内部 ...
- React Router 4.0中文快速入门
import React from 'react' import { BrowserRouter as Router, Route, Link } from 'react-router-dom' co ...
随机推荐
- Nginx漏洞利用与安全加固
本文主要分为两大部分,第一部分介绍了Nginx的一些常见安全漏洞的形成原因.利用方法,并给出了相应的解决办法;第二部分介绍了Nginx安全加固时需要关注的主要内容. Nginx(发音同engine x ...
- SpringMVC配置详解(转)
要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar ...
- [python]字符串的ljust方法
ljust用法: string.ljust(number,'x') 格式化输出字符串,按照number数量调整字符串的总长度,ljust是左对齐,‘x’是填充字符,默认是空格 类似的还有rjust,c ...
- .net core Fundamentals
• Application Startup 應用程序啟動 • Middleware 中間件 • Working with Static Files 靜態文件 • Routing 路由 • URL Re ...
- html 制作静态页面新知识
1.在区块线边框添加一条水平线 例如:<div style:"height :300px;width:800px;border-bottom: solid 1px orange ;& ...
- 【Atcoder】CODE FESTIVAL 2017 qual C D - Yet Another Palindrome Partitioning
[题意]给定只含小写字母的字符串,要求分割成若干段使段内字母重组顺序后能得到回文串,求最少分割段数.n<=2*10^5 [算法]DP [题解]关键在于快速判断一个字符子串是否合法,容易发现合法仅 ...
- 深入浅出MyBatis:JDBC和MyBatis介绍
JDBC相关概念 Java程序都是通过JDBC连接数据库的,通过SQL对数据库编程,JDBC是由SUN公司提出的一些列规范,只定义了接口规范,具体实现由各个数据库厂商去实现,它是一种典型的桥接模式. ...
- centos 挂载数据盘
第一.检查硬盘设备是否有数据盘 fdisk -l 第二.数据硬盘分区 fdisk /dev/vdb 第三.ext3格式化分区 mkfs.ext3 /dev/vdb1 第四.挂载新分区 A - 新建目录 ...
- python3中字典的遍历和合并
#字典的遍历方式 dic={"a":1,"b":2,"c":3} for k in dic: print (k,dic[k]) for k, ...
- Tensorflow 2.0.0-alpha 安装 Linux系统
1.TensorFlow2.0的安装测试 Linux Tensorflow Dev Summit 正式宣布 Tensorflow 2.0 进入 Alpha 阶段. 基于 Anaconda 创建环境一个 ...