reactjs - API 正在工作,但我无法让 axios 写出从 API 返回的数据
问题描述
当我通过浏览器(https://localhost:41216/api/articles)连接到 Axios 时,我正在使用如下所示的 API:
[{"id":1,"name":"Detection of solar neutron events and their theoretical approach","groupById":2,"groupBy":null},
{"id":2,"name":"Dark energy and modified scale covariant theory of gravitation","groupById":2,"groupBy":null},
{"id":3,"name":"United theory of planet formation (i): Tandem regime","groupById":2,"groupBy":null}]
我让它工作,但它是这样硬编码的:
import React from "react";
const OptionList = () => {
return (
<>
<option value='Article' label='Select an article' />
<option value='1' label='Detection of solar neutron events and their theoretical approach' />
<option value='2' label='Dark energy and modified scale covariant theory of gravitation' />
<option value='3' label='United theory of planet formation (i): Tandem regime' />
</>
)
}
export default OptionList;
但我想使用 API,所以我开始编写代码:
import React, { useState, useEffect } from 'react';
import axios from 'axios';
const OptionList = () => {
const [data, setData] = useState('');
useEffect(() => {
const fetchData = async () => {
const result = await axios(
'https://localhost:41216/api/articles',
);
setData(result.data);
};
fetchData();
}, []);
return (
<>
{data.map(item => (
<option value={item.id} label={item.name} />
))}
</>
);
}
export default OptionList;
但我不断收到一条错误消息
TypeError: data.map is not a function
我知道 API 正在工作,因为我在浏览器中访问了 URL,我得到了返回的数据,就像我上面放的例子一样。
解决方案
这个
const [data, setData] = useState('');
将 的默认值初始化data
为空字符串。
简单地,
const [ data, setData ] = useState([]);
通过将数据初始化为空数组以具有.map
方法来解决此问题。
我也会
function renderOptions() {
if(data.length <= 0) {
return <Loader />
}
return data.map(item => (
<option value={item.id} label={item.name} />
))
}
return (
<>
{renderOptions()}
</>
);
这可以显示加载器屏幕,而您data
无需映射和生成<option>
s。
推荐阅读
- flutter - 将回调从模型传递到 Flutter 中的 GestureDetector 的语法
- ajax - Spring mvc使用AJAX一次上传多个文件不起作用
- c# - FFmpeg 停止进程 C#
- ssh - git 与其他 github 电子邮件一起提交?
- swift - 来自字符串插值的警告
- c# - 在 Assembly.GetExecutingAssembly 中执行代码的反射返回 null
- sql - Ms Access 查询计数优先
- zapier - ajv-keywords@3.2.0 需要一个对等的 ajv@^6.0.0
- angular - view.html 中的 Angular HttpErrorResponse
- php - 我正在尝试添加更新信息功能,但不是更新,而是添加新记录