【发布时间】:2022-01-18 05:58:51
【问题描述】:
几天来,我正在尝试解决以下问题。当然,我已经研究并尝试了几种错误消息的解决方案,不幸的是它们都不起作用。我不知道我做错了什么,因此想问问你。 :)
错误消息: “TypeError:无法读取未定义的属性(正在读取'map')”
代码:
function App() {
const [games, setGames] = useState();
useEffect(() => {
getGames();
async function getGames() {
const response = await fetch(
"https://v3.football.api-sports.io/fixtures?season=2021&league=78&date=2021-12-04",
{
method: "GET",
headers: {
"x-rapidapi-host": "v3.football.api-sports.io",
"x-apisports-key": "XXX",
},
}
);
const data = await response.json();
setGames(data.parameters);
}
}, []);
return (
<div>
<h1>Games</h1>
<div className="games">
{games.map((game, index) => (
<div key={index}>
<h2>{game.season}</h2>
</div>
))}
</div>
)
</div>
);
}
export default App;
JSON: JSON GET EXAMPLE 稍后我想从 JSON 文件中提取团队。例如:response.teams.home.name
提前感谢您的关注! :) 如果有任何信息缺失,请告诉我。
问候和感谢
【问题讨论】:
-
首先,不要公开分享您的私有 API 密钥。你的初始状态是空的,你可以创建一个类似 {games && games.map(xxx)} 的条件。
-
我看到“参数”属性是一个对象,所以你不能在那里使用地图功能。如果你执行 setGames(data.response) 那么你可以使用 map 函数将你的状态变成一个列表。
-
为什么不升级到 React 17+ 并利用函数组件?您已经在使用
useState挂钩。 -
现在已经在上述条件下尝试过了,不幸的是它也没有工作。但取而代之的是一条新的错误信息:TypeError: games.map is not a function 还删除了“参数”并使用 setGames(data.response) 进行了尝试。也没有成功。
-
见下面的my response。你可以直接运行sn -p。只要您提供 API 密钥。