browserhistory java,React填坑之react-router刷新后报错解决方法

react-router刷新后报错

以前按照各类教程用BrowserHistory(官方推荐,各类吹)实现了路由跳转

效果以下

19e57f55414604b8227a6a802fa0f0b1.pnghtml

结果一刷新就报错了,各类get不到页面…..

而后,查资料说BrowserHistory要配合服务器,而后将项目打包丢在nginx

上,然而,,然并卵并无什么卵用,而后又查了下,说要是

当nginx找不到页面时让他去找咱们配置好的页面前端

具体缘由:java

之因此你在浏览器内能够由首页跳转到其余路由地址,是由于这是由前端自行渲染的,你在React Router定义了对应的路由,脚本并无刷新网页访问后台,是JS动态更改了location。当你刷新时,你首先是访问的后台地址,而后返回的页面内加载了React代码,最后在浏览器内执行;也就是说若是这个时候报404,是由于你后台并无针对这个路由给出返回HTML内容,也谈不上执行React Router了。解决办法就一条:若是你指望全部的路由都由React Router来定义,只有你的后台,不管任何路径,都返回index.html就行了。剩下的事情交给React Router。那么你要作的就是修改后台服务器,能够放在apache,也能够放在你的java路由内作一个通配路径处理。react

解决办法nginx

若是使用nginx服务器,加上try_files配置:web

location / {

......

try_files $uri /index.html;

}`

而后,主页是跳过去了,然而又报错了!apache

2f8bca77dc6eead23846ddd3e601c225.png

而后,网上的大神是这样说的

3be5037f82811962834aec7c0c6f7883.png浏览器

而后,美滋滋的去试! 然并卵好吗!没什么卵用服务器

最后没办法 果断放弃BrowserHistory,用了被各类大神嫌弃的要死的hashHistory微信

尼玛!真是谁用谁知道啊,特么很好用好很差!

具体为何你们都推荐用browserHistory是由于

首先 browserHistory 其实使用的是 HTML5 的 History API,浏览器提供相应的接口来修改浏览器的历史记录;而 hashHistory 是经过改变地址后面的 hash 来改变浏览器的历史记录;

History API 提供了 pushState() 和 replaceState() 方法来增长或替换历史记录。而 hash 没有相应的方法,因此并无替换历史记录的功能。但 react-router 经过 polyfill 实现了此功能,具体实现没有看,好像是使用 sessionStorage。

另外一个缘由是 hash 部分并不会被浏览器发送到服务端,也就是说无论是请求 #foo 仍是 #bar ,服务只知道请求了 index.html 并不知道 hash 部分的细节。而 History API 须要服务端支持,这样服务端能获取请求细节。

还有一个缘由是由于有些应该会忽略 URL 中的 hash 部分,记得以前将 URL 使用微信分享时会丢失 hash 部分。

虽说得颇有道理,但我仍是坚持用hashHistory,我特么只是想跳转而已

具体用法

1,先引入HashRouter

import {

Router as HashRouter , // 或者是HashRouter、MemoryRouter

Route, // 这是基本的路由块

Link, // 这是a标签

Switch , // 这是监听空路由的

Redirect, // 这是重定向

Prompt // 防止转换

} from 'react-router-dom'

2 引入createHistory

import createHistory from 'history/createHashHistory'

const history = createHistory();

3 构建router

ReactDOM.render(

,

4 写跳转事件

history.push(this.props.flag);

而后就能够了,随你怎么刷新都不会报错了,你们之后遇到坑之后尽可能去看看官方文档,mmp,总有些傻逼喜欢复制来复制去,本身不懂在别人的博客上黏贴一段,百度一下,七八篇如出一辙的原创博文,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值