我正在创建一个网站来展示使用 NextJs 的产品。我需要将数据从页面传递到动态页面。所有数据都是一个 json 对象数组,位于项目内的数据文件夹中。我想列出 pages/rolls/index.jsx 中的所有对象,当单击一个对象对应的“了解更多”链接按钮时,我会转到更详细的页面版本。我无法使用 next/link 和 useRouter 让它工作,所以这就是我所做的。我的项目结构是:
- data
- rollData.json
- pages
- rolls
- [rolldetail].jsx
- index.jsx
// rollData.json
[
{
"name": "8\" x 0.080\" x 300'",
"price": 300,
"product_id": "PL8080300",
"image": "/8flat.webp",
"description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
},
{
"name": "12\" x 0.080\" x 300'",
"price": 450,
"product_id": "PL12080300",
"image": "/12flat.webp",
"description": "Ac turpis egestas sed tempus urna et pharetra"
}
]
// rolls.jsx
import rollsdata from '../../data/rollData.json'
const Rolls = () => {
return (
<main>
{rolls.map((roll) => {
return (
<div key={roll.product_id}>
<h2>{roll.name}</h2>
<h3>
Description
</h3>
<p>{`${roll.description.slice(0, 163)}.`}</p>
<div>
<span>Price</span>
<span>{`$${roll.price.toFixed(
2
)}`}</span>
</div>
<Link href={`/rolls/${encodeURIComponent(roll.product_id)}`}>
<a>click</a>
</Link>
</div>
)
})}
</main>
)
}
// [rollDetail].js
import { useRouter } from 'next/router'
import rolls from '../../data/rolls.json'
const RollDetail = () => {
const router = useRouter()
const roll = rolls[router.query.rolldetail]
console.log(roll)
return (
<div>
<h2>Roll detail</h2>
<p>{roll.name}</p>
<p>{roll.description}</p>
</div>
)
}
export default RollDetail
它给了我错误:
Uncaught TypeError: roll is undefined
我不明白如何使用路由器来显示特定的滚动对象,有人可以告诉我我做错了什么以及如何实现它吗?我应该使用 getStaticProps 和 getStaticRoute 吗?