使用nextjs自定义路由?

时间:2019-07-25 13:39:52

标签: reactjs routing next.js

我有一个检查路径名并对其执行操作的组件:

  const router = useRouter();
  const path = router.pathname;//props.location.pathname;

  const p = path.split('/').filter((s) => s !== "")
  let submissionId = p[0] == 's' && p[1]
  const submission = useQuery(SUBMISSION, {
    variables: {
      id: submissionId
    },
    skip: submissionId === false
  })

这在沼泽标准react应用中正常工作,但nextjs重定向到404。

这是一种为nextjs设置模式以忽略不存在的路由并允许组件代码对其进行处理的方法吗?

2 个答案:

答案 0 :(得分:2)

如果您现在使用的是zeit v2,则可以在此处查看Wildcard Routes

基本上,您的now.json中将有一个文件系统处理程序和一个通配符处理程序,如下所示:

{
  "routes": [
    { "handle": "filesystem" },
    { "src": "/.*", "status": 404, "dest": "SOME_PAGE_HERE" } // <-- this is where all the non-existent routes will be routing to

  ]
}

只需将SOME_PAGE_HERE替换为您在exportPathMap中从文件next.config.js中声明的路径即可。 例如:/contactabout-us等。

答案 1 :(得分:1)

我不确定我是否清楚地了解了您想要什么,但是如果您不希望Next.js重定向到404,则需要在 pages 文件夹中定义页面。 ,您可以使用 dynamic routes 来制作可以完成您想要的操作的组件。

页面文件夹中创建一个名为 [dynamic] .js 的文件:

import React from 'react'
import { useRouter } from 'next/router'

const Dynamic = () => {
  const router = useRouter();
  const { dynamic } = router.query;

  return (
    <div>
      My dynamic page slug: {dynamic}
    </div>
  )
}

export default Dynamic

您可以像这样链接到它:

<Link href="/[dynamic]" as="/dynamic-page-slug">
  <a>Link to my Dynamic Page</a>
</Link>