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表单容器的通用解决方案

    React表单容器的通用解决方案

    本文主要介绍了React表单容器的通用解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • React冒泡和阻止冒泡的应用详解

    React冒泡和阻止冒泡的应用详解

    这篇文章主要介绍了React冒泡和阻止冒泡的应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • React18中startTransition与useTransition的使用

    React18中startTransition与useTransition的使用

    本文主要介绍了React18中startTransition与useTransition的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-05-05
  • React中常用的一些钩子函数总结

    React中常用的一些钩子函数总结

    这篇文章给大家总结了React中常用的一些钩子函数,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • React父组件如何调用子组件的方法推荐

    React父组件如何调用子组件的方法推荐

    在React中,我们经常在子组件中调用父组件的方法,一般用props回调即可,这篇文章主要介绍了React父组件如何调用子组件的方法推荐,需要的朋友可以参考下
    2023-11-11
  • 详解React-Native全球化多语言切换工具库react-native-i18n

    详解React-Native全球化多语言切换工具库react-native-i18n

    这篇文章主要介绍了详解React-Native全球化语言切换工具库react-native-i18n,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 在react中使用highlight.js将页面上的代码高亮的方法

    在react中使用highlight.js将页面上的代码高亮的方法

    本文通过 highlight.js 库实现对文章正文 HTML 中的代码元素自动添加语法高亮,具有一定的参考价值,感兴趣的可以了解一下
    2022-01-01
  • 详解React如何优雅地根据prop更新state值

    详解React如何优雅地根据prop更新state值

    这篇文章主要为大家详细介绍了React如何优雅地实现根据prop更新state值,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • 在React Native中添加自定义字体的方法详解

    在React Native中添加自定义字体的方法详解

    在这篇指南中,我们将探索使用 Google Fonts 在 React Native 应用中添加自定义字体的方法,字体是优秀用户体验的基石,使用定制字体可以为你的应用程序提供独特的身份,需要的朋友可以参考下
    2024-02-02
  • react.js框架Redux基础案例详解

    react.js框架Redux基础案例详解

    这篇文章主要介绍了react.js框架Redux基础案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09

最新评论