P粉0200855992023-08-17 18:30:41
看起来你想要根据通过URL传递的id
从JSON文件
中加载一个项目。
你已经直接将data.json
文件导入到你的组件中,所以不需要使用fetch
或axios
来请求它。它已经作为变量data
存在于组件中。因此,你可以根据从URL获取的id
参数来过滤数据,然后使用相关对象设置item
状态。
这是你应该更新Foodinfo
组件以解决你的问题的方式:
useParams
从URL中获取id
。id
解析为整数,因为params.id
将是一个字符串类型
,而JSON文件
中的数据可能使用数字作为ID。data数组
中找到与URL中的id
相同的item
。setItem
函数将这个item
设置为item状态。调整后的代码:
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> ); }