我试图使用fortnite api显示当前商品商店,并且标题出现错误,当我控制台日志结果时,它显示一个数组,但无法映射它?为什么?
import React, { useState, useEffect } from 'react'
import axios from 'axios';
export default function itemShop() {
const [shop, setShop] = useState('')
const API = 'https://fortnite-public-api.theapinetwork.com/prod09/store/get?language={en}'
useEffect(() => {
const fetchData = async () => {
const result = await axios(
API,
);
setShop(result.data);
};
fetchData();
}, []);
const { items } = shop;
console.log(items)
return (
<div>
<p>{shop.date}</p>
{items.map(item => <p>{item.name}</p>)}
</div>
)
}
答案 0 :(得分:3)
渲染之前,您需要检查项目是否不是null / undefined:
{items && items.map(item => (
<p>{item.name}</p>
))}
答案 1 :(得分:2)
问题在这一行:
const [shop, setShop] = useState('')
由于您期望shop.items
为数组,因此将初始状态定义为:
const [shop, setShop] = useState({ items: [] });
还要为每个p
分配唯一的密钥,在这里:
<p key={item.itemid}>{item.name}</p>
答案 2 :(得分:1)
您也可以这样
{ items?.map(item => (<p>{ item.name }</p>)) }
答案 3 :(得分:0)
对我来说,我忘记了在调用 async 方法后在 axios 中添加 await 。像下面的代码。如果上述方法对您没有帮助,请确保再次检查您的代码。
async function getCategories() {
try {
const response = axios.get("API");
setCategories(response.data);
} catch (error) {
console.log("error", error);
}
}
答案 4 :(得分:0)
如果有人想了解这个问题及其解决方案,可以访问网站网站,这对我真的很有帮助 https://www.debuggr.io/react-map-of-undefined/