javascript - Javascript无法遍历数组
问题描述
我有一个数组,浏览器没有对其进行迭代,而是说 data.map() 不是一个函数。我发现的所有答案都说当数据不是数组时会出现这个问题,但我的数据肯定是数组。
奇怪的是,这仅在从 url 获取数据时发生,但是当我使用所获取数据的保存 .json 文件时,程序运行良好。我认为我在获取数据时没有做错任何事情 - 我得到这样的数据 -
export default function useFetch(url) {
const [state, setState] = useState({
data: "",
loading: true,
});
useEffect(() => {
setState((state) => ({
data: state.data,
loading: true,
}));
fetch(url)
.then((x) => {
if (x.ok) {
return x.json();
}
})
.then((y) => {
setState({
data: y,
loading: false,
});
});
}, [url, setState]);
return state;
}
在另一个组件中,我给一个常量一个值:
const { data, loading } = useFetch(url);
然后它会使我的程序崩溃,说它 data.map() 不是一个函数
但是,当我手动转到相同的 url,并保存那里的 JSON 文件,然后使用该文件而不是 fetch 时,程序运行得很好。const data1 = require("../data.json");
所以我有一个案例,其中 data.json 与我从 fetch 请求中获得的数据完全相同,而 fetch 请求本身却没有。不仅如此,我还可以为 data[0].name 和其他类似的东西创建控制台日志。
最后一个问题是,今天早上,程序也在使用 fetch 版本本身,我只是保存了 .json 文件并开始使用它们,因为我不想继续向服务器发送请求。在某个时候,我想开始用实际的 feth 响应来测试它,然后它就不再起作用了。
作为最后一点信息 - 当我使用保存的 .json 文件编译程序,然后更改代码以使用获取的数据并保存时,我的程序不会崩溃,我可以使用相同的以及其他获取的数据直到我刷新浏览器,此时我再次收到错误。
解决方案
考虑初始化状态为
{
data: [],
loading: true,
}
推荐阅读
- delphi - Delphi 正确签名 LowLevelKeyboardProc()
- fetch - 获取失败时如何获得更明确的错误消息?
- python - 在 python 中使用 for 循环遍历文本文件 - 为什么会这样?
- python - 当没有“更多”按钮时,向下滚动到网页末尾时,单击使用 python selenium 动态加载的链接
- node.js - 对于模型“modelName”的路径“_id”处的值“{ populate: [] }”,转换为 ObjectId 失败。NodeJS 猫鼬
- azure - 将 VM 映像复制到 Blob 存储
- excel - 使用 Excel 条件格式检查日期
- c++ - 在 C/C++ 中将数组作为形式参数作为 int arr[] 和 int arr[N] 传递的区别
- javascript - 页面加载时的变量重置
- docker - 如何配置 Node-RED Docker 将输出文件写入“数据”目录?