在 React 客户端中使用 useEffect() 运行 fetch(URL) 时获取 NULL / 空数据
Getting NULL / empty data when running fetch(URL) with useEffect() in React client
我构建了一个可靠地支持 API
的 NodeJS 服务器
http://localhost:5000/record/gopa
returns 一个格式正确的 JSON 字符串
{"pid":
{
"ck":"F1965121910:265.522.5788.37",
"name":"gopa",
"cID":"MVOE9BW5ZZOC"
}
}
我已经构建了一个 ReactJS 客户端来接收这个 JSON 输出并将其转换为字符串以供后续处理,如下所示:
import React, { useEffect, useState } from "react";
import { useParams } from "react-router";
export default function Detail52() {
const params = useParams();
const [dbdata, setData] = useState('empty52');
useEffect(() => {
async function getData() {
//const response = await fetch(`http://localhost:5000/record/${params.id.toString()}`);
const response = await fetch(`http://localhost:5000/record/gopa}`);
if (!response.ok) {
const message = `An error occurred: ${response.statusText}`;
window.alert(message);
return;
}
const dbdata = await response.json();
window.alert(JSON.stringify(dbdata));
setData(dbdata);
//setData('fake data')
}
getData();
return;
},[dbdata]);
return (
<div>
<h3>Detail 52</h3>
<p>{dbdata}</p>
<p>{JSON.stringify(dbdata)}</p>
</div>
);
}
执行时,我在 dbdata 中得到 NULL 值,当我将 JSON 输出转换为一个字符串。
我最初的印象是 ${params.id.toString()} 没有被正确传递,所以暂时我硬编码了参数,效果是一样的。
我已经通过在获取 dbdata 后发出警报来测试它,它显示 null
为了完成测试,我还使用 setData() 函数放置了一个 'fake data',这个假数据正确反映在最终输出。
所以,我认为,问题不在于 setData(),而是返回了一个空字符串。
我已经为此苦苦挣扎了很长一段时间,我认为我已经将问题定位了。如果有人能帮我解决这个问题,将不胜感激。
首先我认为你插入了错误的 URL 因为你在它的末尾有一个括号:
const response = await fetch(`http://localhost:5000/record/gopa}`);
//Instead of
const response = await fetch(`http://localhost:5000/record/gopa`);
我看到你在等待两次你的对象:
- 获取后的第一个:
const response = await fetch(`http://localhost:5000/record/gopa}`);
- 第二个(似乎没有必要):
const dbdata = await response.json();
// How it should be:
const dbdata = response.json();
能否请您将回复的内容记录下来,以了解这是问题所在还是问题来自您的代码的另一部分?如果是这样,我将编辑 post
我构建了一个可靠地支持 API
的 NodeJS 服务器http://localhost:5000/record/gopa
returns 一个格式正确的 JSON 字符串
{"pid":
{
"ck":"F1965121910:265.522.5788.37",
"name":"gopa",
"cID":"MVOE9BW5ZZOC"
}
}
我已经构建了一个 ReactJS 客户端来接收这个 JSON 输出并将其转换为字符串以供后续处理,如下所示:
import React, { useEffect, useState } from "react";
import { useParams } from "react-router";
export default function Detail52() {
const params = useParams();
const [dbdata, setData] = useState('empty52');
useEffect(() => {
async function getData() {
//const response = await fetch(`http://localhost:5000/record/${params.id.toString()}`);
const response = await fetch(`http://localhost:5000/record/gopa}`);
if (!response.ok) {
const message = `An error occurred: ${response.statusText}`;
window.alert(message);
return;
}
const dbdata = await response.json();
window.alert(JSON.stringify(dbdata));
setData(dbdata);
//setData('fake data')
}
getData();
return;
},[dbdata]);
return (
<div>
<h3>Detail 52</h3>
<p>{dbdata}</p>
<p>{JSON.stringify(dbdata)}</p>
</div>
);
}
执行时,我在 dbdata 中得到 NULL 值,当我将 JSON 输出转换为一个字符串。
我最初的印象是 ${params.id.toString()} 没有被正确传递,所以暂时我硬编码了参数,效果是一样的。
我已经通过在获取 dbdata 后发出警报来测试它,它显示 null
为了完成测试,我还使用 setData() 函数放置了一个 'fake data',这个假数据正确反映在最终输出。
所以,我认为,问题不在于 setData(),而是返回了一个空字符串。
我已经为此苦苦挣扎了很长一段时间,我认为我已经将问题定位了。如果有人能帮我解决这个问题,将不胜感激。
首先我认为你插入了错误的 URL 因为你在它的末尾有一个括号:
const response = await fetch(`http://localhost:5000/record/gopa}`);
//Instead of
const response = await fetch(`http://localhost:5000/record/gopa`);
我看到你在等待两次你的对象:
- 获取后的第一个:
const response = await fetch(`http://localhost:5000/record/gopa}`);
- 第二个(似乎没有必要):
const dbdata = await response.json();
// How it should be:
const dbdata = response.json();
能否请您将回复的内容记录下来,以了解这是问题所在还是问题来自您的代码的另一部分?如果是这样,我将编辑 post