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 ,改完后重新打包后可能会因为浏览器缓存问题,看不到效果,所以及时清理缓存。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 从零开始搭建webpack+react开发环境的详细步骤

    从零开始搭建webpack+react开发环境的详细步骤

    这篇文章主要介绍了从零开始搭建webpack+react开发环境的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 在React页面重新加载时保留数据的实现方法总结

    在React页面重新加载时保留数据的实现方法总结

    在React页面重新加载时保留数据,可以通过多种方法来实现,常见的方法包括使用浏览器的本地存储(Local Storage 或 Session Storage)、URL参数、以及服务器端存储等,本文给大家总结了一些具体实现方法,需要的朋友可以参考下
    2024-06-06
  • React组件设计过程之仿抖音订单组件

    React组件设计过程之仿抖音订单组件

    这篇文章主要介绍了React组件设计过程之仿抖音订单组件的实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • React+Webpack快速上手指南(小结)

    React+Webpack快速上手指南(小结)

    这篇文章主要介绍了React+Webpack快速上手指南(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • React降级配置及Ant Design配置详解

    React降级配置及Ant Design配置详解

    这篇文章主要介绍了React降级配置及Ant Design配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 使用react遍历对象生成dom

    使用react遍历对象生成dom

    这篇文章主要介绍了使用react遍历对象生成dom问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • React SSR 中的限流案例详解

    React SSR 中的限流案例详解

    这篇文章主要介绍了React SSR 之限流,React SSR 毕竟涉及到了服务端,有很多服务端特有的问题需要考虑,而限流就是其中之一,本文会通过一个简单的案例来说明,为什么服务端需要进行限流,需要的朋友可以参考下
    2022-07-07
  • React前端DOM常见Hook封装示例上

    React前端DOM常见Hook封装示例上

    这篇文章主要为大家介绍了React前端DOM常见Hook封装示例上篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • react实现todolist的增删改查详解

    react实现todolist的增删改查详解

    这篇文章主要为大家介绍了react实现todolist的增删改查,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 在React中用canvas对图片标注的实现

    在React中用canvas对图片标注的实现

    本文主要介绍了在React中用canvas对图片标注的实现 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论