防止getStaticPaths在特定区域运行



是否有可能阻止Next.jsgetStaticPaths为特定语言环境生成静态页面?

在我的下一个配置:

i18n: {
locales: ['default', 'en', 'hu', 'de', 'cz', 'eu', 'sl'],
defaultLocale: 'default',
localeDetection: true,
},

这只是因为我们一直需要语言环境,默认情况下,Next.js不支持它,所以我们必须使用中间件技巧,后面跟着Next.js官方文档:https://github.com/vercel/next.js/discussions/18419

但是现在当我想生成网站时,我不想生成像

这样的页面
  • /违约/产品/id1
  • /违约/产品/id2

我怎样才能防止Next.js这样做?因为这行不通:对于我的常见问题页面,/help/[maincategory]/[subcategory]/[help].

使用slice(我将跳过默认区域设置):

locales.slice(1).map((locale) => {
pages.map((item) => {
item.data.mainTabList?.[locale]?.map((main, mainidx) => {
main.subTabList?.map((sub, subidx) => {
questions.map((help) => {
help.data.helplist?.[locale]?.map((title) => {
const urllink = {
maincategory: urlConverter(main.tab),
subcategory: urlConverter(sub.tab),
help: title.url
}

routes.push(urllink)
})
})
})
})
})
})
const paths = routes.map((doc) => ({
params: {
maincategory: `${doc.maincategory}`,
subcategory: `${doc.subcategory}`,
help: doc.help?.toLowerCase(),
},
}))

谁能帮助我如何解决这个问题,/default页不会生成,因为这只是我的语言环境前缀的一种黑客方式,我们不会在任何地方使用它。

可以通过在paths数组中返回所需的区域设置来控制getStaticPaths将为哪些区域设置生成路径。

来自i18n动态路由文档:

对于使用getStaticProps和动态路由的页面,所有区域设置需要返回想要预呈现的页面的变体来自getStaticPaths。与paths返回的params对象一起,您还可以返回一个locale字段,指定您想要使用的语言环境渲染。


在您的示例中,您的getStaticPaths函数应该大致如下所示:

export const getStaticPaths = ({ locales }) => {
// Your own logic

// Filter out the `default` locale, and map through the remaining locales
locales.filter((locale) => locale !== 'default').map((locale) => {
pages.map((item) => {
item.data.mainTabList?.[locale]?.map((main, mainidx) => {
main.subTabList?.map((sub, subidx) => {
questions.map((help) => {
help.data.helplist?.[locale]?.map((title) => {
const urlLink = {
maincategory: urlConverter(main.tab),
subcategory: urlConverter(sub.tab),
help: title.url,
locale // Also push current `locale` value to be used in `paths` array
}
routes.push(urlLink)
})
})
})
})
})
})
const paths = routes.map((doc) => ({
params: {
maincategory: `${doc.maincategory}`,
subcategory: `${doc.subcategory}`,
help: doc.help?.toLowerCase(),
},
locale: doc.locale // Pass `locale` value here
}))
return {
paths,
fallback: false
}
}

来自官方文档关于getStaticProps:

对于非动态的getStaticProps页面,为每个页面生成一个版本如上所述的区域设置。getStaticProps在每个语言环境中调用被呈现。

如果您想从预渲染后,您可以返回notFound: true从getStaticProps这个页面的变体将不会被生成。

export async function getStaticProps(ctx: GetStaticPropsContext) {
if (ctx.locale === 'none') { // or check "default"
return {
notFound: true,
}
}
return {
props: {},
revalidate: 3600,
}
}

最新更新