如何解决遍历 JSON 数组,访问输出名称和 Id 以设置 className
我正在通过获取 Fortnite 即将推出的项目来练习进行 api 调用。
我正在尝试访问 json 数组中的 itemId 和项目名称,大致如下所示:
data: Array(67)
0: {itemId: "bcc523f5-bef4-44eb-8855-35a1413b669c",lastUpdate: 1617619592,item: {…}}
1: {itemId: "723a761f-fa59-4cfc-92e7-9309a87c5a9e",lastUpdate: 1617585135,item: {…}
}
然后:
0:
item: {name: "Ruby Shadows",description: "Sometimes you gotta go dark.",type: "outfit",rarity: "epic",series: "shadow",…}
itemId: "bcc523f5-bef4-44eb-8855-35a1413b669c"
lastUpdate: 1617619592
__proto__: Object
我使用 .map 来执行此操作,但在某些情况下,<h3 key={items.itemId}>
中的对象字面量不会返回所需的结果。 (目前返回 undefined)
我整个下午都在为这件事头疼。仍然是新的反应。
我的代码:
import './App.css';
import { Link } from 'react-router-dom';
function Shop() {
useEffect(() => {
fetchItems();
},[]);
const [items,setItems] = useState([]);
let dataArray = [];
const fetchItems = async () => {
const data = await fetch('https://fortnite-api.theapinetwork.com/upcoming/get');
const items = await data.json();
dataArray = items.data;
setItems(dataArray.map( x => {return x}));
console.log(items);
}
return (
<div id="App">
<h1>Upcoming Fortnite Items</h1>
<div>
{items.map(x =>
<Link to={`/shop/${items.itemId}`}>
<h3 key={items.itemId}>
{x.item.name}
</h3>
</Link>)}
</div>
</div>
);
}
export default Shop;
感谢您的帮助,谢谢。
编辑:
这是另一个组件处理另一个页面的组件,其中应该输出项目详细信息:(抱歉)
import './App.css';
import { Link } from 'react-router-dom';
function ItemDetail({ match }) {
/**this puts it into effect */
useEffect(() => {
fetchItem();
console.log(match);
},[]);
const [item,setItem] = useState([]);
const fetchItem = async () => {
const fetchItem = await fetch(`https://fortnite-api.theapinetwork.com/item/get?id={{itemid}}`);
const item = await fetchItem.json();
}
return (
<div id="App">
<h1>Item</h1>
</div>
);
}
export default ItemDetail;```
解决方法
问题就在这里:
return (
<div id="App">
<h1>Upcoming Fortnite Items</h1>
<div>
{items.map(x =>
<Link to={`/shop/${items.itemId}`}> // <------- Here
<h3 key={items.itemId}> //<-------- Here
{x.item.name}
</h3>
</Link>)}
</div>
</div>
);
您需要从每个元素中获取 itemId
,现在您正在尝试从实际数组中获取值,该数组不包含任何字段,因此为您提供 undefined
。
代码应该是这样的:
return (
<div id="App">
<h1>Upcoming Fortnite Items</h1>
<div>
{items.map(x =>
<Link to={`/shop/${x.itemId}`}>
<h3 key={x.itemId}>
{x.item.name}
</h3>
</Link>)}
</div>
</div>
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。