【发布时间】:2020-03-08 22:12:44
【问题描述】:
我正在尝试使用 useEffect 从 API 中获取一些数据。我成功地获取了数据,但是在设置状态并尝试通过它进行映射后,我只得到“无法读取未定义的映射”。我认为问题在于它在获得响应之前正在运行我的 .map() 代码。我只是不确定如何解决这个问题
这是 api 响应:
data: {count: 87, next: "https://swapi.co/api/people/?page=2", previous: null, results: Array(10)}
这是我的代码
import React, { useState, useEffect } from 'react';
import axios from 'axios';
import './App.css';
import CharacterMap from './characterMap'
const App = () => {
let [getChars, setChars] = useState(0);
useEffect(() => {
axios.get(`https://swapi.co/api/people/`)
.then(res => setChars(res) )
},[]);
console.log(getChars.data.map((e) => e))
return (
<div className="App">
<CharacterMap info={getChars} />
</div>
);
}
export default App;
【问题讨论】:
-
map调用的目的是什么?它只是创建一个具有相同信息的新数组,就像slice()一样。 -
在 .map 工作后,我将使用它来提取更多数据。
-
明白了。 FWIW,我认为您想要
res => setChars(res.data.results)或res => setChars(res.results)(这是在您将useState中的0更改为[]之后,所以它始终是一个数组)。这也可能是您提取所需数据的地方,而不是稍后。所以res => setChars(res.data.results.map(/*...*/)). -
另外,
getChars这个名字使它看起来像一个函数。既然是数据,我建议就叫它chars。
标签: javascript reactjs use-effect