总结改变和获取 url 的方法 (包括 umi,react-router,原生)

news/2024/7/15 18:10:20 标签: react.js, 前端, javascript

原生: 

背景 : location.search,但返回的是一个?xxx=aa&yyy=bb 这种形式,并不能供我们正常调用,通常我们可能会用正则进行进一步截取,

快速获取当前页面的参数 : 
方法一:
location.href = 'http://www.baidu.com?ddd=1&fff=2'

const querySearch = location.search // ?ddd=1&fff=2

const queryParams = new URLSearchParams(querySearch)    // 得到URLSearchParams解析对象

const result = Object.fromEntries(queryParams.entries())    // { ddd: 1, fff: 2 }
方法二:
const params = new Proxy(new URLSearchParams(window.location.search), {
  get: (searchParams, prop) => searchParams.get(prop),
});

console.log(params) // 得到一个Proxy对象

console.log(params.ddd) // 1

封装成一个hook

const useParams = (urlSearch?) => {
    const params = useRef(
        new Proxy(new URLSearchParams(urlSearch || window.location.search), {
            get: (searchParams, prop) => searchParams.get(prop),
        })
    );

    return params.current
}

Umi:

useParams

useParams 钩子函数返回动态路由的匹配参数键值对对象;子路由中会集成父路由的动态参数。

import { useParams } from 'umi';

// 假设有路由配置  user/:uId/repo/:rId
// 当前路径       user/abc/repo/def
const params = useParams()
/* params
{ uId: 'abc', rId: 'def'}
*/

跳转/获取路由 : 

import { history,history  } from 'umi';

// 正确的在组件或页面中执行路由导航
const handleClick = () => {
  history.push('/app-settings/popular', { data: '这是一些状态数据' });
};



// 通过  history.location.query 获取
if (history.location.query?.id || history.location.query?.draftId) 

获取路由参数:

  const state: any = useLocation().state // 获取上面方法的数据


http://www.niftyadmin.cn/n/5087157.html

相关文章

《C和指针》(1)快速上手

1、空白和注释 如果想要注释某一行代码,可以使用如下条件编译指令,而不是采用普通的注释符/* */,这样做更安全。 #if 0statements #endif2、预处理指令 预处理器读入源代码,根据预处理指令对其进行修改,然后把修改过…

Grafana 10 新特性解读:体验与协作全面提升

作者:徽泠(苏墨馨) 为了庆祝 Grafana 的 10 年里程碑,Grafana Labs 推出了 Grafana 10,这个具有纪念意义的版本强调增强用户体验,使各种开发人员更容易使用。Grafana v10.0.x 为开发者与企业展示卓越的新功能、可视化与协作能力&…

【Page-level Heap Fengshui -- Cross-Cache Overflow】corCTF2022-cache-of-castaways

前言 什么叫 Cross Cache 呢?其实就是字面意思,我们知道内核中的大部分结构体都有自己的专属 slab 内存池。那现在我们可以想象一下这个场景,我们拥有一个特定 kmem-cache 的溢出漏洞,那么我们该如何利用呢? 程序分析…

GIS小技术分享(一):python中json数据转geojson或者shp

1.环境需求 geopandspandasshapelyjsonpython3 2.输入数据(path字段,线条) [{"id": "586A685D568311B2A16F33FCD5055F7B","name": "普及江","path": "[[116.35178835446628,23.57…

【树莓派/入门】1.69inch LCD屏幕的连接与测试

说在前面 树莓派版本:4bLCD模块:MAX30102树莓派系统:Linux raspberrypi 5.15.76-v8 #1597 SMP aarch64 GNU/Linuxpython版本:3.9.2买回来发现不是触摸屏,瞎了 模块详情 某雪的1.69inch LCD模块,包含杜邦线…

代码随想录算法训练营第五十二天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 视频讲解:动态规划,股票至多买卖两次,怎么求? | LeetCode:123.买卖股票最佳时机III_哔哩哔哩_bilibili 代码随想录 (1)代码 188.买卖股票的最佳时机IV 视频讲解&a…

力扣刷题 day43:10-13

1.完全平方数 给你一个整数 n ,返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 …

数据结构:二叉排序树

什么是二叉排序树? 二叉排序树要么是空二叉树,要么具有如下特点: 二叉排序树中,如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;二叉排序树中,如果其根结点有右子树&#xf…