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> ); }