reactjs - 如何在 React 中使用 fetch API 正确实现地图功能?
问题描述
我正在尝试将获取的数据插入到地图函数中,该函数返回每个员工的姓名
,但我收到一个错误,上面写着“data.map 不是函数”。我该如何解决这个问题>import React, { useState, useEffect } from "react";
//const data = [{id:1,employee_name:"Tiger Nixon",employee_salary:320800,employee_age:61,profile_image:""},{id:2,employee_name:"Garrett Winters",employee_salary:170750,employee_age:63,profile_image:""}]
export default function App() {
const [data, setData] = useState([]);
useEffect(() => {
fetch("https://dummy.restapiexample.com/api/v1/employees")
.then(response => response.json())
.then(result => setData(result))
},[]);
const information = data.map((item,i) => {
return (<h1> item.employee_name </h1>);
})
return (
<div className="App">
<h1> {information} </h1>
<h2>Start editing to see some magic happen!</h2>
</div>
);
}
解决方案
打开链接https://dummy.restapiexample.com/api/v1/employees(你在哪里获取数据)
请注意,它返回一个对象而不是一个数组。该对象包含status
(字符串)、data
(数组)和message
(字符串)。这data
是您希望保存的部分。现在您正在保存整个对象,因此.map
不是一个函数。
有 2 种方法可以修复它。
第一次只保存data
到你的状态
useEffect(() => {
fetch("https://dummy.restapiexample.com/api/v1/employees")
.then(response => response.json())
.then(result => setData(result.data || []))
},[]);
注意添加[]
确保 ifdata
为 null - 该数组将存在,因此.map
不会引发错误。
或者将你的状态模型切换到一个对象const [data, setData] = useState(null);
并像这样渲染
const information = data?.data?.map((item,i) => {
return (<h1> item.employee_name </h1>);
})
注意 using?.
只是一个if
它不存在的 IF。如果data?
值为.data
。?.map
如果有.data
一个方法.map
。如果其中任何一个返回 false - 整个事情都返回 null。
建议坚持第一种方式。但取决于你
推荐阅读
- cordova-plugins - 如何使用 deviceorientation 事件获取绝对方向值?
- rust - 如何写入 BufWriter 并获取写入的内容?
- prestashop - Prestashop 1.7 在产品详细信息中添加链接,该链接转到使用产品名称预编译的联系表
- php - 无法安装 Windows 10 上的 Xampp Intl 扩展
- php - Mysql 数据库 - 将文件导入新数据库
- vb.net - .Net 中什么时候真正需要构造函数/属性?
- ruby - 为什么当 File 对象是新的时,flock() 的工作方式不同?
- r - 如何使用默认 Web 代理设置在 R 中配置 curl 包?
- php - 尝试更新 sql 数据库中的日期时如何解决此错误?
- c++ - 如何使用带有附加参数的 lambda 函数的 std::transform