React 路由组件选择与页面刷新问题分析

Posted 毕小宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React 路由组件选择与页面刷新问题分析相关的知识,希望对你有一定的参考价值。

背景

总结最近 React 开发遇到的几个问题及解决过程。

state 跳转数据丢失问题

通过 state 传递数据的方式进行跳转时,如果 F5 刷新页面,会丢失参数导致页面异常。

解决办法之一可以用缓存:

// 如果是刷新页面,则没有 state 属性,从缓存中获取
if(this.props.location.state == undefined) 
	this.props.location.state = JSON.parse(sessionStorage.getItem('data'));


if(this.props.location.state != undefined) 
	sessionStorage.setItem('data',JSON.stringify(this.props.location.state));
 else 
	// 缓存和path 都没有参数,则设置默认属性,保证页面不报错
	this.props.location.state = 
	  // TODO 默认的参数配置,保证页面不报错
	;

将请求参数转换为 JSON 字符串缓存到本地,网上还有一种方式是用 Qs 转换,测试发现它有一个问题,就是数值类型的的值被序列化为字符串了,导致数据类型与之前不一致。

如果清空了缓存后,再执行刷新操作,那么 else 分支中配置的默认参数会生效。

search 方式

笔记简单的跳转方式是用 search 方式,将参数序列化。

Qs 序列化数据到 search 后浏览器地址栏会变得特别长,感觉不是很友好。

antd Table 的分页配置

antd 的 Table 组件,它的pagination 配置中,决定当前页码的参数名叫 current,在一些跳转返回的需求中,可能返回列表的页码不是初始 1,此时需要注意参数名称。

这个参数名称容易与后台提交时的分页参数弄混,所以必须牢记。

BrowserRouter 刷新后 404 问题

如果 React 项目使用 BrowserRouter 的路由,存在一个问题,F5 刷新页面的时候,会出现 404 空白页。

解决办法是改成 HashRouter ,改完后重新打包后可能会因为浏览器缓存问题,看不到效果,所以及时清理缓存。

以上是关于React 路由组件选择与页面刷新问题分析的主要内容,如果未能解决你的问题,请参考以下文章

react多个路由共用同一个组件模块,切换路由跳转页面不刷新问题

在 React 路由器中使用“链接到”时如何刷新页面?

react返回上一级路由为啥会刷新

react native 路由跳转后页面不刷新问题

巧用同步请求处理react页面刷新问题

React中路由操作、页面跳转