- 最小复制站点:https ://nextjs-paths-issue.vercel.app/
- 最小复制代码:https ://github.com/saadq/nextjs-encoding-issue
我正在尝试遍历一组食物对象并根据其标题为每个对象创建静态页面。这适用于大多数食物,但如果食物标题包含/
,则导航到页面(例如“好草莓/猕猴桃甜点”页面)将抛出 404。
在主页中,我在创建Link
时对 URL 进行了编码,然后在getStaticPaths
函数中,我paths
使用相同的编码链接创建了。但是,它在部署时似乎不起作用。
该页面在运行时确实在本地工作npm run dev
,但在实际输出构建中似乎存在问题。我可以做些什么来允许带有编码斜杠的路径工作吗?
主页
const HomePage: NextPage = () => (
<>
<h1>Home</h1>
<ul>
{foods.map((food) => (
<li key={food.title}>
<Link href={`/food/${encodeURIComponent(food.title)}`}>
{food.title}
</Link>
</li>
))}
</ul>
</>
)
食物页面
export const getStaticProps: GetStaticProps<Props, Params> = (ctx) => {
const title = ctx.params?.foodTitle as string
const food = foods.find((food) => food.title === title) as Food
return {
props: {
food
}
}
}
export const getStaticPaths: GetStaticPaths = () => {
const paths = foods.map((food) => `/food/${encodeURIComponent(food.title)}`)
return {
paths,
fallback: false
}
}
const FoodPage: NextPage<Props> = ({ food }) => {
return (
<>
<Link href='/'>Go Back</Link>
<h1>{food.title}</h1>
<h2>Amount: {food.amount}</h2>
</>
)
}
export default FoodPage