【发布时间】:2021-12-05 03:00:00
【问题描述】:
我正在尝试遍历一组食物对象并根据其标题为每个对象创建静态页面。这适用于大多数食物,但如果食物标题包含 /,则导航到页面(例如 the "Nice strawberry/kiwis dessert" page)将引发 404。
在主页中,我在 create the Link 时对 URL 进行了编码,然后在 getStaticPaths function 中,我使用相同的编码链接创建了 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
【问题讨论】:
-
@juliomalves 这似乎与空间有关,对吧?与
%20的链接本身似乎并没有引起问题,它似乎只是在涉及/时。例如,此链接有效:nextjs-paths-issue.vercel.app/food/Pears%20%26%20Bananas
标签: javascript reactjs next.js nextjs-dynamic-routing