Next.js 路由简介

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

  • Index Routes - 文件夹中存在的 index.js 文件映射到目录的根目录。 例如 -
  • pages/index.js 映射到“/”。
  • pages/posts/index.js 映射到“/posts”。
  • Nested Routes - 路由器支持嵌套路由。 如果您创建嵌套文件夹结构,文件将自动以相同的方式路由。
  • pages/settings/dashboard/about.js 映射到“/settings/dashboard/about”。
  • pages/posts/first.js 映射到“/posts/first”。
  • Dynamic Routes - 我们也可以使用命名参数来匹配 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 - pages 目录中的页面名称。 例如 /posts/first 指的是 pages/posts 目录中的 first.js。

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

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

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

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"> First Post</Link>
         <br/>
         <div>Next stars: {props.stars}</div>
         <img src="/jiyik_logo.png" alt="迹忆客 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 //workspace/node/nextjs
> next dev

ready - started server on 0.0.0.0:3000, url: http://localhost:3000
event - compiled client and server successfully in 418 ms (124 modules)

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

Next.js 路由

点击First Post 链接。

Next.js 路由第二个页面

查看笔记

扫码一下
查看教程更方便