如何使用 useState 处理 API 响应以更新状态?
How do I handle an API response with useState to update a state?
我正在处理 API 回复。我的目标是利用这个 API 响应来更新指定的状态。
这里是我的功能组件的必要代码片段:
const [recordImagesPayload, setRecordImagesPayload] = useState([]);
useEffect(() => {
const headers = { 'Content-Type': 'application/json' };
// const payload = JSON.stringify({ ...createPayload(), recordImage: newImage });
request(`${url}`, { headers, method: 'GET' })
.then((response: any) => response.json())
.then(json => {
var obj = JSON.parse(json);
var res: any = [];
for (var i in obj) {
res.push(obj[i]);
}
setRecordImagesPayload(res);
console.log(res);
});
}, []);
我的 console.is 没有显示我最后一行代码的资源。我可能对响应做错了什么,但我不知道该怎么做。
请帮忙。
提前致谢。 :)
我假设请求函数正在使用 fetch 函数,在这种情况下,您已经在使用 response.json() 调用解析 json 响应,因此下一个 then 中的解析值不是 json,因此您不必在
处使用 JSON.parse
尝试运行这个。在这里,我们可以使用 Object.values
而不是创建新数组和 for 循环
useEffect(() => {
const headers = { 'Content-Type': 'application/json' };
// const payload = JSON.stringify({ ...createPayload(), recordImage: newImage });
request(`${url}`, { headers, method: 'GET' })
.then((response: any) => response.json())
.then(result => {
const res = Object.values(result);
setRecordImagesPayload(res);
console.log(res);
});
}, []);
谢谢@Akhil。我的代码中有一个关于 Typescript 的小问题导致了这个问题。没有指定结果的类型,但除此之外,Akhil 的回答非常准确。非常感谢您的快速响应和支持。
这是对我有用的最终代码:
useEffect(() => {
const headers = { 'Content-Type': 'application/json' };
// const payload = JSON.stringify({ ...createPayload(), recordImage: newImage });
request(`${url}`, { headers, method: 'GET' })
.then((response: any) => response.json())
.then(result: any => {
const res = Object.values(result);
setRecordImagesPayload(res);
console.log(res);
});
}, []);
我正在处理 API 回复。我的目标是利用这个 API 响应来更新指定的状态。
这里是我的功能组件的必要代码片段:
const [recordImagesPayload, setRecordImagesPayload] = useState([]);
useEffect(() => {
const headers = { 'Content-Type': 'application/json' };
// const payload = JSON.stringify({ ...createPayload(), recordImage: newImage });
request(`${url}`, { headers, method: 'GET' })
.then((response: any) => response.json())
.then(json => {
var obj = JSON.parse(json);
var res: any = [];
for (var i in obj) {
res.push(obj[i]);
}
setRecordImagesPayload(res);
console.log(res);
});
}, []);
我的 console.is 没有显示我最后一行代码的资源。我可能对响应做错了什么,但我不知道该怎么做。
请帮忙。
提前致谢。 :)
我假设请求函数正在使用 fetch 函数,在这种情况下,您已经在使用 response.json() 调用解析 json 响应,因此下一个 then 中的解析值不是 json,因此您不必在
处使用 JSON.parse尝试运行这个。在这里,我们可以使用 Object.values
而不是创建新数组和 for 循环useEffect(() => {
const headers = { 'Content-Type': 'application/json' };
// const payload = JSON.stringify({ ...createPayload(), recordImage: newImage });
request(`${url}`, { headers, method: 'GET' })
.then((response: any) => response.json())
.then(result => {
const res = Object.values(result);
setRecordImagesPayload(res);
console.log(res);
});
}, []);
谢谢@Akhil。我的代码中有一个关于 Typescript 的小问题导致了这个问题。没有指定结果的类型,但除此之外,Akhil 的回答非常准确。非常感谢您的快速响应和支持。
这是对我有用的最终代码:
useEffect(() => {
const headers = { 'Content-Type': 'application/json' };
// const payload = JSON.stringify({ ...createPayload(), recordImage: newImage });
request(`${url}`, { headers, method: 'GET' })
.then((response: any) => response.json())
.then(result: any => {
const res = Object.values(result);
setRecordImagesPayload(res);
console.log(res);
});
}, []);