Maison > Questions et réponses > le corps du texte
P粉0200855992023-08-17 18:30:41
Il semble que vous souhaitiez charger un élément en fonction du id
从JSON文件
transmis via l'URL.
Vous avez directement défini le statut data.json
文件导入到你的组件中,所以不需要使用fetch
或axios
来请求它。它已经作为变量data
存在于组件中。因此,你可以根据从URL获取的id
参数来过滤数据,然后使用相关对象设置item
.
Voici comment mettre à jour le composant Foodinfo
pour résoudre votre problème :
useParams
从URL中获取id
. id
解析为整数,因为params.id
将是一个字符串类型
,而JSON文件
peuvent utiliser des chiffres comme identifiants. data数组
中找到与URL中的id
相同的item
. setItem
函数将这个item
pour définir le statut de l'article. Code ajusté :
import React, { useState, useEffect } from 'react'; import { Link, useParams } from 'react-router-dom'; import data from './data.json'; export default function Foodinfo() { const params = useParams(); const [item, setItem] = useState(null); useEffect(() => { // 将URL参数中的id解析为整数类型 const idFromUrl = parseInt(params.id, 10); // 在数据数组中找到与URL中的id匹配的项目 const foundItem = data.find((d) => d.id === idFromUrl); // 将找到的项目设置为状态 setItem(foundItem); }, [params.id]); return ( <div> <h1>食物信息</h1> {/* 在尝试访问其属性之前检查项目是否存在 */} {item ? ( <> <img src={item.pic} alt={item.name} /> <p>{item.name}</p> <p>{item.description}</p> </> ) : ( <p>加载中...</p> )} <Link to="/"> <button>菜单</button> </Link> </div> ); }