【发布时间】:2021-03-18 07:03:57
【问题描述】:
寻找一种方法来解析 URL 以获取从 Linking 接收的 React Native 中的查询变量。
我收到的 URL 类似于:
url-app-scheme://somePage?someVar=someVal
我想从 URL 中获取 someVar 值。
有什么想法吗?
【问题讨论】:
标签: react-native
寻找一种方法来解析 URL 以获取从 Linking 接收的 React Native 中的查询变量。
我收到的 URL 类似于:
url-app-scheme://somePage?someVar=someVal
我想从 URL 中获取 someVar 值。
有什么想法吗?
【问题讨论】:
标签: react-native
这应该可以解决问题
var url = "http://example.com?myVar=test&otherVariable=someData&number=123"
var regex = /[?&]([^=#]+)=([^&#]*)/g,
params = {},
match;
while (match = regex.exec(url)) {
params[match[1]] = match[2];
}
console.log(params)
【讨论】:
https://www.jskap.com/blog/React-Native-parse-url-query-params/
# 的参数传递,它在那里不起作用。
有一个URL class in JavaScript 旨在让您能够健壮地构建和解析 URL,使查询参数易于访问:
const url = new URL('url-app-scheme://somePage?someVar=someVal');
url.searchParams.get('someVar')
遗憾的是,URL 在 React Native 中的实现并不完整and has some known bugs。幸运的是,有一个名为 react-native-url-polyfill 的可靠 polyfill 库,它提供了 URL 的实现,它的表现和测试都很好 - 我强烈推荐它。
【讨论】:
您可以从 JS 生态系统中利用一些方法来做到这一点。试试 URI.js https://github.com/medialize/URI.js
【讨论】:
使用查询字符串来工作
yarn add query-string
import queryString from 'query-string';
const parsed = queryString.parseUrl("https://pokeapi.co/api/v2/pokemon?offset=10&limit=10");
console.log(parsed.offset) will display 10
【讨论】:
试试网址https://www.npmjs.com/package/url
“该模块具有用于 URL 解析和解析的实用程序,旨在与 node.js 核心 url 模块具有相同的功能。”
节点 URL 对象在使用 Chrome react-native 调试器时可用于您的应用程序,但在不受限制时在您的 iPhone 上不可用。
所以使用这个包
npm install url
示例代码:
import url from 'url';
...
let urlObject = url.parse(inUrlString);
let outUrlString = urlObject.protocol + '//' + urlObject.host + '/more/jump?jump_path=' + encodeURIComponent(urlObject.pathname);
【讨论】:
url="example.com/path/?id=1"?
url="example.com/path/?id=1"
let urlObject = url.parse(url, true); // second parameter `true` (parse search query)
console.log(urlObject.query['id']); // 1
【讨论】:
更新:这不是上述问题的解决方案,因为除非处于调试模式,否则它不起作用。但是,我没有删除此答案,因为我认为它指出了值得注意的细微差别。
React Native(使用版本 0.46)支持 JavaScript 自己的 URL Web API。您可以使用 to 轻松解析或构建 url 的任何部分。
API 与WHATWG API of the URL module in Node.js 相同,这个答案确实应该更明显,但它很容易因为可用的好 url 解析包的数量而迷失。
编辑:由于某种原因,这仅在 JS 调试模式下有效,否则无效。所以这个解决方案并不真正有效,但我把它留在这里是因为我很想知道如何让相同的 URL 模块与 react-native 一起使用。
【讨论】: