社区首页 >问答首页 >React-router和Gitlab页面: location.state丢失

React-router和Gitlab页面: location.state丢失
EN

Stack Overflow用户
提问于 2019-01-15 20:21:46
回答 1查看 503关注 0票数 0

我在gitlab页面上托管了一个react-app,我使用react-router在使用historyRouter的页面之间进行路由。路由运行得很好,但是当我重新加载(点击f5)或者直接通过粘贴url到我的地址栏来打开一个路由时,站点就会丢失它们的整个状态。这意味着,例如,我在myaccount.gitlab/mysite,我使用这种方法点击任何重定向到myaccount.gitlab/mysite/nextpage的链接,

代码语言:javascript
代码运行次数:0
复制
 this.props.history.push("/nextpage", {
      mystate: this.state.mystate
    })

我还将状态mystate推送到此页面。到目前为止,一切都很正常,但是如果我尝试重新加载页面,我会得到一个emtpy页面。控制台调试告诉我this.location.state是未定义的。我成功地修复了这个问题,告诉nextpage的构造函数,如果this.location.state是未定义的或空的,就将它设置为任何默认值。现在我可以成功地重新加载页面,但是所有状态都消失了。

有什么办法可以纠正这种行为吗?这只是gitlab的问题吗?我可以在本地以开发模式和生产模式在localhost上运行我的应用程序,丢失任何状态或其他东西都不会有任何问题。下面是我使用的一些附加代码:

Gitlab-cli.yml:

代码语言:javascript
代码运行次数:0
复制
test:
 image: node:9.6.1
 stage: test
 script:
  - npm install;  npm run test
pages:
image: node:9.6.1
stage: deploy
variables:
  PUBLIC_URL: "/mypage"
script:
 - rm package.json; mv package.json.pages package.json; 
   npm install;npm install react-scripts@1.1.1 -g;npm run build
 - rm -rf public; mv build public
artifacts:
paths:
 - public 
only:
- master 

index.js:

代码语言:javascript
代码运行次数:0
复制
import { Switch, Route, BrowserRouter as Router } from "react-router-dom";
const routing = (
 <Router basename={process.env.PUBLIC_URL}>
  <div>
    <Switch>
     <Route exact path="/" component={main} />
     <Route path="/nextpage" component={nextPage} />} />
     <Route component={PageNotFound} />
    </Switch>
  </div>
 </Router>
);

ReactDOM.render(routing, document.getElementById("root"));  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 23:39:57

我相信这不是gitlab相关的问题。这是有意义的,在第一个场景中,你从主页转到nextPage,传递一个参数myState,这样nextPage就可以通过props使用它了。而在第二个版本中,您不知从何而来,所以历史上并没有意识到myState。

一种解决方案是简单地使用lolacstorag

main.js

代码语言:javascript
代码运行次数:0
复制
// instead of:
/*this.props.history.push("/nextpage", {
  mystate: this.state.mystate
 })
 */
 
 // do:
 localStorage.setItem('myState', JSON.stringify(this.state.myState));

nextPage组件

代码语言:javascript
代码运行次数:0
复制
export default class nextPage extends React.Component{
  //...
  componentDidMount(){
    // grap it from localStorage:
    let myState = JSON.parse(localStorage.getItem('myState'));
    // do whatever you want with it,
    // it will be available unless you unset it
   }
   /... rest of your code..
   
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54206272

复制
相关文章
React-Router 5.0 制作导航栏+页面参数传递
使用React构建SPA应用(单页面应用),要想实现页面间的跳转,首先想到的就是使用路由。在React中,常用的有两个包可以实现这个需求,那就是react-router和react-router-dom。本文主要针对react-router-dom进行说明。
憧憬博客
2020/07/21
3.5K0
Vuex页面刷新的数据丢失问题
Vuex用起来确实很舒服,但是今天碰到了个问题,就是我将JWT和一些权限字符串使用store保存的时候,刷新页面之后这些值就没了,由于我后端集成了SpringSecurity,所以每次请求我都会去验证JWT,如果刷新页面的话,后续请求头中就没有token,就会导致报错。
别团等shy哥发育
2023/03/04
1.8K0
Vuex页面刷新的数据丢失问题
react-router之onEnter和onLeave
在之前介绍过react-router的使用,在这里我们介绍一下路由的onEnter和onLeave,顾名思义,分别是路由进入之前和路由离开之前,我们可以在这段时间内做一些处理。比如下面这个例子
OECOM
2020/07/01
2.2K0
gitlab和gitlab项目迁移
由于版本跨度比较大,不能直接将原gitlab项目备份导出,然后在新gitlab中导入。
py3study
2020/08/19
1.5K0
前端路由的原理及应用
早期的路由都是后端来实现的,根据用户访问的地址的不同,浏览器从服务器请求对应的资源或页面展示给用户。当页面数据量大,结构复杂的时候,随之造成服务器的压力也比较大,而且用户访问速度也比较慢。
江米小枣
2020/06/16
2.3K0
前端路由的原理及应用
vue传参页面刷新数据丢失问题
在做vue的时候,经常会遇到组件之间数据的传递问题,通过params或者query传参,但是,当页面刷新的时候,数据会丢失,找不到数据。今天经过总结,解决了这个问题。通过了一下几种情况进行传值:
小周sir
2019/09/23
2.9K0
vue传参页面刷新数据丢失问题
React-Router
​ react-router是核心部分。react-router-dom提供了浏览器使用需要的定制组件。react-router-native则专门提供了在原生移动应用中需要用到的部分。
Cloud-Cloudys
2020/07/06
2.4K0
HackerOne | GitLab中Wiki页面存储型XSS
Ryhmnlfj发现GitLab的Wiki特定的分层链接Markdown存在存储型XSS漏洞。
Timeline Sec
2019/12/15
1K0
离开页面前,如何防止表单数据丢失?
本文介绍了如何实现一个FormPrompt组件,在用户尝试离开具有未保存更改的页面时发出警告。文章讨论了如何使用纯JavaScript和beforeunload事件处理这类情况,以及使用React Router v5中的Prompt组件和useBeforeUnload以及unstable等React特定解决方案。向用户添加一个确认对话框,询问他们在具有未保存表单更改的情况下是否确认重定向是一种良好的用户体验实践。通过显示此提示,用户将意识到他们有未保存的更改,并允许在继续重定向之前保存或丢弃它们的工作。
前端小智@大迁世界
2023/05/02
5.9K0
git和github gitlab的区别_gitlab和git区别
GitHub是在线代码仓库,全世界只有GitHub一家,大家把代码存储在人家的服务器上。 Gitlab相当于小型的GitHub,你可以在本地搭建一个属于你自己的类似GitHub仓库,让小伙伴把代码存储在上面,这样代码只有你们几个人能看见,但是你要存在GitHub上,全世界都能看见
全栈程序员站长
2022/11/01
6520
将WordPress发布到静态GitLab页面站点
通过 GitLab 或 GitHub Pages 来提供一个 WordPress 镜像站点, 从而最小化安全问题。
星哥玩云
2022/07/14
6510
React-router杂记
1.组件直接通过redux的connect 2.该组件不是路由组件,也就是没有这样的代码
菜的黑人牙膏
2019/01/21
1.3K0
gitlab升级版本ci/cd runner页面500错误
gitlab从8.5.7版本升级到gitlab15.11.0版本参照:gitlab远古版本备份&还原&升级,gitlab-11.1.4继续升级到15.9.3。15.9.3版本又执行了一次升级到了gitlab15.11.0。过程基本都是一样的。但是注明一下:我其实升级了两个实例:一个8.5.7-15.11.0,另外一个10.8.7-15.11.0.这里区别说明,是因为两个解决的过程稍微不一样,升级完成后页面都是一样的,点了一遍左侧栏:
对你无可奈何
2023/05/04
1.2K0
react-router 入门笔记
React-router 笔记 官方文档 基本思路 react-router 通过react 组件的方式实现, 路由相关的数据,通过props传递给组件调用, 路由层级关系, 通过标签嵌套实现 基础标签 BrowserRouter : 路由容器 该组件只能包含单个元素 Route : 组件渲染出口 必须包含在 BrowserRouter 中 exact 精确匹配 Link : 跳转链接 必须包含在 BrowserRouter 中 基本使用 // react-router-demo import
copy_left
2019/08/21
1.6K0
react-router实现机制
react-router是专为React设计的路由解决方案,以react component的方式提供API,包含常用的Router,Route,IndexRedirect,Link,browserHistory等。react-router充分利用react component提供的生命周期特性,使定义路由和开发react component体验一致。
IMWeb前端团队
2019/12/04
1.5K0
手写react-router
至于react-router帮助我们实现了什么东西我就不过多阐述了, 这个直接移步官方文档, 我们下面直接聊实现
helloworld1024
2022/12/14
1.3K0
[探索]前端路由Router原理
路由这个概念最早出现在后端,通过⽤户请求的url导航到具体的html⻚⾯。现在的前端路由不同 于传统路由,它不需要服务器解析,⽽是可以通过hash函数或者history API来实现。在前端开发中,我 们可以使⽤路由设置访问路径,并根据路径与组件的映射关系切换组件的显示,⽽这整个过程都是在同 ⼀个⻚⾯中实现的,不涉及⻚⾯间的跳转,这也就是我们常说的单⻚应⽤(spa)。
前端LeBron
2021/12/08
2.7K0
[探索]前端路由Router原理
Laravel跳转页面丢失session问题解决方法
在Laravel中使用Session时跳转页面后就获取不到了,通过查阅文档找到了解决方法 在写入session时,还需要保存session如下: <?php //写入session session()
素描
2021/10/28
8810
vuex + sessionstorage 解决vue项目刷新后页面空白/数据丢失
首先查看sessionStorage的地方在控制台的 Application > Storage > Session Storage这里:
xing.org1^
2018/08/02
3K0
vuex + sessionstorage  解决vue项目刷新后页面空白/数据丢失
点击加载更多

相似问题

如何在页面重新加载时清除react-router中的location.state?

6671

React-router和google缓存的SPA页面

29

gitlab runner码头网络丢失

15

浏览和清理Gitlab页面文件

10

推送后Gitlab文件丢失

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文