在 Ionic React 中存储 HTTP 响应的最佳方式是什么?
What's the best way to store a HTTP response in Ionic React?
我正在使用 Ionic React 开发一个应用程序,它向 API 执行一些 HTTP 请求。问题是我需要将请求的响应存储在本地存储中,以便在任何地方都可以访问它。我目前使用的方式是 @ionic/storage
:
let body = {
username: username,
password: password
};
sendRequest('POST', '/login', "userValid", body);
let response = await get("userValid");
if (response.success) {
window.location.href = "/main_tabs";
} else if (!response.success) {
alert("Incorrect password");
}
import { set } from './storage';
// Handles all API requests
export function sendRequest(type: 'GET' | 'POST', route: string, storageKey: string, body?: any) {
let request = new XMLHttpRequest();
let payload = JSON.stringify(body);
let url = `http://localhost:8001${route}`;
request.open(type, url);
request.send(payload);
request.onreadystatechange = () => {
if (request.readyState === 4 && storageKey) {
set(storageKey, request.response);
}
}
}
问题是,当我得到 userValid
键时,响应还没有返回,所以即使等待也会 return 未定义。因此,我每次都必须发送另一个相同的请求,以便 Ionic 读取正确的值,这实际上是第一个请求的响应。除了每次执行请求时设置超时之外,还有正确的方法吗?
您正在检查设置之前的存储结果。这是因为您的 sendRequest 方法正在调用异步 XMLHttpRequest 请求,并且您在 sendRequest 方法完成之前正在检查存储。这可以通过使 sendRequest 异步并稍微重构您的代码来解决。
我建议您改为寻找使用钩子或 API 库进行离子反应的示例 - 例如 fetch or Axios。这将使您的生活更轻松,并且您应该找到很多示例和文档。查看下面的一些参考资料以开始使用:
Example from the Ionic Blog using Hooks
Example using Fetch using React
Related Stack Overflow leveraging Axios
我正在使用 Ionic React 开发一个应用程序,它向 API 执行一些 HTTP 请求。问题是我需要将请求的响应存储在本地存储中,以便在任何地方都可以访问它。我目前使用的方式是 @ionic/storage
:
let body = {
username: username,
password: password
};
sendRequest('POST', '/login', "userValid", body);
let response = await get("userValid");
if (response.success) {
window.location.href = "/main_tabs";
} else if (!response.success) {
alert("Incorrect password");
}
import { set } from './storage';
// Handles all API requests
export function sendRequest(type: 'GET' | 'POST', route: string, storageKey: string, body?: any) {
let request = new XMLHttpRequest();
let payload = JSON.stringify(body);
let url = `http://localhost:8001${route}`;
request.open(type, url);
request.send(payload);
request.onreadystatechange = () => {
if (request.readyState === 4 && storageKey) {
set(storageKey, request.response);
}
}
}
问题是,当我得到 userValid
键时,响应还没有返回,所以即使等待也会 return 未定义。因此,我每次都必须发送另一个相同的请求,以便 Ionic 读取正确的值,这实际上是第一个请求的响应。除了每次执行请求时设置超时之外,还有正确的方法吗?
您正在检查设置之前的存储结果。这是因为您的 sendRequest 方法正在调用异步 XMLHttpRequest 请求,并且您在 sendRequest 方法完成之前正在检查存储。这可以通过使 sendRequest 异步并稍微重构您的代码来解决。
我建议您改为寻找使用钩子或 API 库进行离子反应的示例 - 例如 fetch or Axios。这将使您的生活更轻松,并且您应该找到很多示例和文档。查看下面的一些参考资料以开始使用:
Example from the Ionic Blog using Hooks
Example using Fetch using React
Related Stack Overflow leveraging Axios