Guy*_*Guy 29 fetch reactjs react-native
我正在提出这样的请求:
fetch("https://api.parse.com/1/users", {
method: "GET",
headers: headers,
body: body
})
Run Code Online (Sandbox Code Playgroud)
如何传递查询字符串参数?我只是将它们添加到URL吗?我在文档中找不到一个例子.
Ben*_*ton 40
您的第一个想法是正确的:只需将它们添加到URL即可.
请记住,您可以使用模板字符串(反引号)来简化将变量放入查询中.
const data = {foo:1, bar:2};
fetch(`https://api.parse.com/1/users?foo=${encodeURIComponent(data.foo)}&bar=${encodeURIComponent(data.bar)}`, {
method: "GET",
headers: headers,
})
Run Code Online (Sandbox Code Playgroud)
Mar*_*ery 20
只需将值替换为URL,如下所示:
const encodedValue = encodeURIComponent(someVariable);
fetch(`https://example.com/foo?bar=${encodedValue}`);
Run Code Online (Sandbox Code Playgroud)
是的,您只需要自己将查询字符串添加到URL.但是,您应该注意转义查询字符串参数 - 不要只构造一个类似的URL
`https://example.com/foo?bar=${someVariable}`
Run Code Online (Sandbox Code Playgroud)
除非你有信心,someVariable
绝对不含有任何&
,=
或其他特殊字符.
如果您在fetch
React Native之外使用,则可以选择使用编码查询字符串参数URLSearchParams
.但是,React Native 不支持URLSearchParams
.相反,使用encodeURIComponent
.
例如:
const encodedValue = encodeURIComponent(someVariable);
fetch(`https://example.com/foo?bar=${encodedValue}`);
Run Code Online (Sandbox Code Playgroud)
如果要将键和值的对象序列化为查询字符串,可以使用实用程序函数来执行此操作:
function objToQueryString(obj) {
const keyValuePairs = [];
for (const key in obj) {
keyValuePairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
return keyValuePairs.join('&');
}
Run Code Online (Sandbox Code Playgroud)
......并像这样使用它:
const queryString = objToQueryString({
key1: 'somevalue',
key2: someVariable,
});
fetch(`https://example.com/foo?${queryString}`);
Run Code Online (Sandbox Code Playgroud)
这是一个 es6 方法
const getQueryString = (queries) => {
return Object.keys(queries).reduce((result, key) => {
return [...result, `${encodeURIComponent(key)}=${encodeURIComponent(queries[key])}`]
}, []).join('&');
};
Run Code Online (Sandbox Code Playgroud)
在这里,我们接收一个查询对象,其形式为key: param
我们迭代并减少该对象的键,构建一个编码查询字符串数组。最后,我们进行连接并返回这个可附加的查询字符串。
归档时间: |
|
查看次数: |
54380 次 |
最近记录: |