NextJS:如何从url导航到自定义路径?

时间:2020-03-08 13:00:16

标签: reactjs next.js

我有一个菜单组件可用于在我的网站内部进行导航,例如:

<Link href="/containers/grades/List" as="/grades">

我使用“ as”保持网址清洁 但是问题是导航页面无法刷新;如果刷新页面,则会出现404错误。

我知道“ as”用于在URL中显示自定义地址,但是我需要一种从URL进入组件的方法 在这种情况下,我想从"/grades"导航到"/containers/grades/List"

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

有了<Link href="/containers/grades/List" as="/grades">,您就有了客户端路由,而对于服务器端,只需将以下代码添加到next.config.js;

 experimental: {
      async rewrites() {
        return [
          { source: '/grades', destination: '/containers/grades/List' }
          ];
       }
    }

这会将它们连接起来。

答案 1 :(得分:1)

对于动态页面,您可以使用useRouter在页面之间进行动态路由。

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>
  )
}

导出默认动态 您可以像这样链接到它:

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

您还可以通过添加next.config.js文件来进行自定义路由:

// next.config.js
module.exports = {
  async redirects() {
    return [
      // 307 temporary redirect
      {
        source: "/",
        destination: "/under-construction",
        permanent: false,
      },
      // 308 permanent redirect
      {
        source: "/posts",
        destination: "/blog",
        permanent: true // permanent redirect
      },
      // With parameter and custom status code
      {
        source: "/photos/:id",
        destination: "/photo/:id",
        statusCode: 303 // see other
      }
    ];
  }
};