Next.js 如何定义动态路由?

推荐答案

在 Next.js 中,动态路由可以通过在 pages 目录下创建带有方括号 [] 的文件名来定义。例如,创建一个文件 pages/posts/[id].js,这样就可以匹配 /posts/1posts/2 等路径。

-- -------------------- ---- -------
-- -------------------
------ - --------- - ---- --------------

----- ---- - -- -- -
  ----- ------ - ------------
  ----- - -- - - -------------

  ------ -------- ---------
--

------ ------- -----

在这个例子中,id 是一个动态路由参数,可以通过 useRouter 钩子从 router.query 中获取。

本题详细解读

1. 动态路由的基本概念

动态路由允许你在 URL 中使用变量,从而根据不同的 URL 参数渲染不同的内容。Next.js 通过在 pages 目录下创建带有方括号 [] 的文件名来实现动态路由。

2. 动态路由的文件命名

pages 目录下,文件名中的方括号 [] 表示这是一个动态路由。例如:

  • pages/posts/[id].js 可以匹配 /posts/1/posts/2 等路径。
  • pages/users/[username].js 可以匹配 /users/john/users/jane 等路径。

3. 获取动态路由参数

在动态路由组件中,你可以使用 useRouter 钩子来获取路由参数。useRouter 返回一个 router 对象,其中 query 属性包含了所有的路由参数。

-- -------------------- ---- -------
------ - --------- - ---- --------------

----- ---- - -- -- -
  ----- ------ - ------------
  ----- - -- - - -------------

  ------ -------- ---------
--

------ ------- -----

在这个例子中,id 是从 URL 中提取的动态参数。

4. 多段动态路由

你还可以定义多段动态路由。例如,pages/posts/[category]/[id].js 可以匹配 /posts/tech/1/posts/life/2 等路径。

-- -------------------- ---- -------
-- ------------------------------
------ - --------- - ---- --------------

----- ---- - -- -- -
  ----- ------ - ------------
  ----- - --------- -- - - -------------

  ------ -
    ---
      --------- ----------- ----- ----
    ----
  --
--

------ ------- -----

5. 可选动态路由

Next.js 还支持可选动态路由。通过在方括号内添加 ... 来表示可选参数。例如,pages/posts/[...slug].js 可以匹配 /posts/a/posts/a/b/posts/a/b/c 等路径。

-- -------------------- ---- -------
-- ------------------------
------ - --------- - ---- --------------

----- ---- - -- -- -
  ----- ------ - ------------
  ----- - ---- - - -------------

  ------ -------- ---------------------
--

------ ------- -----

在这个例子中,slug 是一个数组,包含了所有的路径片段。

6. 动态路由与静态生成

动态路由可以与 getStaticPathsgetStaticProps 结合使用,以实现静态生成。getStaticPaths 用于生成所有可能的路径,而 getStaticProps 用于在构建时获取数据。

-- -------------------- ---- -------
-- -------------------
------ - --------- - ---- --------------

------ ----- -------- ---------------- -
  ----- ----- - -- ------- - --- --- - -- - ------- - --- --- - ---
  ------ - ------ --------- ----- --
-

------ ----- -------- ---------------- ------ -- -
  ----- ---- - - --- ---------- ------ ----- ------------- --
  ------ - ------ - ---- - --
-

----- ---- - -- ---- -- -- -
  ------ -------- -----------------
--

------ ------- -----

在这个例子中,getStaticPaths 定义了所有可能的路径,getStaticProps 在构建时获取数据并传递给组件。

纠错
反馈