Next.js - 路由


Next.js 使用基于文件系统的路由器。每当我们将任何页面添加到页面目录时,它都会自动通过 url 访问。以下是该路由器的规则。

  • 索引路由- 文件夹中存在的index.js 文件映射到目录的根目录。例如 -

    • page/index.js 映射到“/”。

    • pages/posts/index.js 映射到 '/posts'。

  • 嵌套路由- 页面目录中的任何嵌套文件夹结构,因为路由器 url 自动生成。例如 -

    • pages/settings/dashboard/about.js 映射到“/settings/dashboard/about”。

    • pages/posts/first.js 映射到“/posts/first”。

  • 动态路由- 我们也可以使用命名参数来匹配 url。使用括号表示相同的内容。例如 -

    • pages/posts/[id].js 映射到“/posts/:id”,我们可以在其中使用“/posts/1”等 URL。

    • pages/[user]/settings.js 映射到“/posts/:user/settings”,我们可以在其中使用“/abc/settings”等 URL。

    • pages/posts/[...all].js 映射到“/posts/*”,我们可以在其中使用任何 URL,例如“/posts/2020/jun/”。

页面链接

Next.JS 允许使用 Link React 组件在客户端链接页面。它具有以下属性 -

  • href - 页面目录中页面的名称。例如/posts/first指的是pages/posts 目录中存在的first.js。

让我们创建一个示例来演示这一点。

在此示例中,我们将更新index.js 和first.js 页面以使服务器命中来获取数据。

让我们更新全局 CSS 支持章节中使用的 nextjs 项目。

更新pages目录中的index.js文件,如下所示。

import Link from 'next/link'
import Head from 'next/head'

function HomePage(props) {
   return (
      <>
         <Head>
            <title>Welcome to Next.js!</title>
         </Head>
         <div>Welcome to Next.js!</div>
         <Link href="/posts/first">> <a>First Post</a></Link>
         <br/>
         <div>Next stars: {props.stars}</div>
         <img src="/logo.png" alt="TutorialsPoint Logo" />
      </>	    
   )
}

export async function getServerSideProps(context) {
   const res = await fetch('https://api.github.com/repos/vercel/next.js')
   const json = await res.json()
   return {
      props: { stars: json.stargazers_count }
   }
}

export default HomePage

启动 Next.js 服务器

运行以下命令启动服务器 -。

npm run dev
> nextjs@1.0.0 dev \Node\nextjs
> next

ready - started server on http://localhost:3000
event - compiled successfully
event - build page: /
wait  - compiling...
event - compiled successfully
event - build page: /next/dist/pages/_error
wait  - compiling...
event - compiled successfully

验证输出

在浏览器中打开 localhost:3000,您将看到以下输出。

带有数据的主页

单击第一篇文章链接。

带数据的首页