react路由跳转传参刷新页面后参数丢失的解决

 更新时间:2023年06月07日 09:34:14   作者:司宁  
这篇文章主要介绍了react路由跳转传参刷新页面后参数丢失的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

react路由跳转传参刷新页面后参数丢失

import { useHistory } from 'react-router-dom';
const history = useHistory();
history.push({
      pathname: '/details',
      state: {
        name: name,
        id: id,
      },
});

在history中使用state确实可以传参数,在进入页面时可以正常显示,但是在刷新页面后state里面的数据会清空,页面就无法正常显示。

import { useHistory } from 'react-router-dom';
const history = useHistory();
history.push({
      pathname: '/details',
      query: {
        name: name,
        id: id,
      },
});

使用query是在跳转链接中增加参数,可以在实现传参的同时刷新页面后数据不会丢失,但是如果传的参数过多链接会很长。

import { useLocation } from 'react-router-dom';
const location = useLocation();
const name = location.query.name;
const id = location.query.id;
// 获取state参数的写法
const name = location.state.name;
const id = location.state.id;

这是在跳转页面获取参数的方式

(亲测有效,但是会有类型报错)

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中组件的this.state和setState的区别

    React中组件的this.state和setState的区别

    在React开发中,this.state用于初始化和读取组件状态,而setState()用于安全地更新状态,正确使用这两者对于管理React组件状态至关重要,避免性能问题和常见错误
    2024-09-09
  • react实现一个优雅的图片占位模块组件详解

    react实现一个优雅的图片占位模块组件详解

    这篇文章主要给大家介绍了关于react如何实现一个还算优雅的占位模块图片组件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • React如何使用refresh_token实现无感刷新页面

    React如何使用refresh_token实现无感刷新页面

    本文主要介绍了React如何使用refresh_token实现无感刷新页面,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • React实现倒计时功能组件

    React实现倒计时功能组件

    这篇文章主要为大家详细介绍了如何通过React实现一个倒计时功能组件,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-09-09
  • 浅谈React Native 中组件的生命周期

    浅谈React Native 中组件的生命周期

    本篇文章主要介绍了浅谈React Native 中组件的生命周期,非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • React组件间通讯传值实现详解

    React组件间通讯传值实现详解

    这篇文章主要介绍了React组件间通讯传值,react组件的通信属于开发基础知识,今天来梳理一下,当然rudex还按老规矩排除在外,如同上篇文章的hooks一样,单独梳理
    2022-11-11
  • 在react中使用vuex的示例代码

    在react中使用vuex的示例代码

    这篇文章主要介绍了在react中使用vuex的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • concent渐进式重构react应用使用详解

    concent渐进式重构react应用使用详解

    这篇文章主要为大家介绍了concent渐进式重构react应用的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • React Hooks的useState、useRef使用小结

    React Hooks的useState、useRef使用小结

    React Hooks 是 React 16.8 版本引入的新特性,useState和useRef是两个常用的Hooks,本文主要介绍了React Hooks的useState、useRef使用,感兴趣的可以了解一下
    2024-01-01
  • react+antd4实现优化大批量接口请求

    react+antd4实现优化大批量接口请求

    这篇文章主要为大家详细介绍了如何使用react hooks + antd4实现大批量接口请求的前端优化,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-02-02

最新评论