我在我的项目中使用react-router-dom 4.0.0-beta.6 . 我有一个如下代码:
<Route exact path="/home" component={HomePage}/>
我想在 HomePage 组件中获取查询参数 . 我找到了 location.search param,它看起来像这样: ?key=value ,所以它是未解析的 .
HomePage
location.search
?key=value
使用react-router v4获取查询参数的正确方法是什么?
我刚刚做了这个,所以如果您更新以从较低版本更新路由器v4或更高版本,则不需要更改整个代码结构(使用redux路由器存储库中的查询) .
https://github.com/saltas888/react-router-query-middleware
接受的答案很有效,但如果您不想安装其他软件包,可以使用:
getUrlParameter = (name) => { name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]'); let regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); let results = regex.exec(window.location.search); return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' ')); };
鉴于 http://www.google.co.in/?key=value
http://www.google.co.in/?key=value
getUrlParameter('key');
将返回 value
value
解析查询字符串的能力是从V4中取出的,因为多年来一直有人要求支持不同的实现 . 有了这个,团队决定最好让用户决定实现的样子 . 我们建议导入查询字符串lib . Here's one that I use
const queryString = require('query-string'); const parsed = queryString.parse(props.location.search);
如果您想要原生的东西,也可以使用 new URLSearchParams ,它可以满足您的需求
new URLSearchParams
const params = new URLSearchParams(props.location.search); const foo = params.get('foo'); // bar
您可以阅读有关决定的更多信息here
给出的答案是可靠的 .
如果你想使用qs模块而不是query-string(它们的流行度大致相同),这里是语法:
const query = qs.parse(props.location.search, { ignoreQueryPrefix: true })
ignoreQueryPrefix选项是忽略前导问号 .
我正在研究反应路由器v4的params,他们没有将它用于v4,而不像反应路由器v2 / 3 . 我将留下另一个功能 - 也许有人会发现它有用 . 你只需要es6或普通的javascript .
function parseQueryParams(query) { //You get a '?key=asdfghjkl1234567890&val=123&val2&val3=other' const queryArray = query.split('?')[1].split('&'); let queryParams = {}; for (let i = 0; i < queryArray.length; i++) { const [key, val] = queryArray[i].split('='); queryParams[key] = val ? val : true; } /* queryParams = { key:"asdfghjkl1234567890", val:"123", val2:true, val3:"other" } */ return queryParams; }
此外,可以改进此功能
5 回答
我刚刚做了这个,所以如果您更新以从较低版本更新路由器v4或更高版本,则不需要更改整个代码结构(使用redux路由器存储库中的查询) .
https://github.com/saltas888/react-router-query-middleware
接受的答案很有效,但如果您不想安装其他软件包,可以使用:
鉴于
http://www.google.co.in/?key=value
将返回
value
解析查询字符串的能力是从V4中取出的,因为多年来一直有人要求支持不同的实现 . 有了这个,团队决定最好让用户决定实现的样子 . 我们建议导入查询字符串lib . Here's one that I use
如果您想要原生的东西,也可以使用
new URLSearchParams
,它可以满足您的需求您可以阅读有关决定的更多信息here
给出的答案是可靠的 .
如果你想使用qs模块而不是query-string(它们的流行度大致相同),这里是语法:
ignoreQueryPrefix选项是忽略前导问号 .
我正在研究反应路由器v4的params,他们没有将它用于v4,而不像反应路由器v2 / 3 . 我将留下另一个功能 - 也许有人会发现它有用 . 你只需要es6或普通的javascript .
此外,可以改进此功能