在 Next.js 中,文件名或文件夹名中使用方括号 []

在 Next.js 中,文件名或文件夹名中使用方括号 [] 是一种特殊的语法,用于创建动态路由。这种语法允许你定义可变的 URL 段,使得你的应用能够处理不同的参数和动态内容。让我们深入探讨这个概念,并了解它的各种用法和最佳实践。

  1. 基本概念

在 Next.js 中,方括号 [] 用于表示动态路由段。当你在 pages 目录下创建一个带有方括号的文件或文件夹时,Next.js 会将其解释为一个动态路由。

例如:

  • pages/posts/[id].js 将匹配 /posts/1, /posts/2, /posts/abc 等路由
  1. 动态路由的工作原理

当你创建一个动态路由时,Next.js 会自动将匹配的 URL 段作为参数传递给你的组件。你可以通过 useRouter 钩子来访问这些参数。

// pages/posts/[id].js
import {
   
    useRouter } from 'next/router'

export default function Post() {
   
   
  const router = useRouter()
  const {
   
    id } = router.query

  return <p>Post: {
   
   id}</p>
}

在这个例子中,访问 /posts/123 会渲染 “Post: 123”。

  1. 多级动态路由

你可以在路径中使用多个动态段:

pages/[category]/[id].js

这将匹配像 /news/123 或 /sports/456 这样的路由。

  1. 捕获所有路由

如果你想捕获所有后续的路径段,可以使用 … 语法:

pages/posts/[...slug].js

这将匹配 /posts/2020/01/01, /posts/category/subcategory 等。你可以通过 router.query.slug 访问这些段,它们会以数组的形式提供。

  1. 可选的捕获所有路由

如果你想让捕获所有路由变为可选,可以将参数包裹在双方括号中:

pages/[[...slug]].js

这将匹配 /, /posts, /posts/123, /posts/a/b/c 等。

  1. 动态 API 路由

动态路由也适用于 API 路由:

pages/api/posts/[id].js

这允许你创建动态的 API 端点。

  1. 预渲染和动态路由

对于动态路由,Next.js 提供了两种预渲染方法:静态生成(SSG)和服务器端渲染(SSR)。

7.1 静态生成

使用 getStaticPaths 和 getStaticProps:

// pages/posts/[id].js
export async function getStaticPaths() {
   
   
  // 返回可能的路径列表
  return {
   
   
    paths: [
      {
   
    params: {
   
    id: '1' } },
      {
   
    params: {
   
    id: '2' } },
    ],
    fallback: false
  }
}

export async function getStaticProps({
    
     params }) {
   
   
  // 获取具体的帖子数据
  const res = await fetch(`https://api.example.com/posts/${
     
     params.id}`)
  const post = await res.json()

  return {
   
    props: {
   
    post 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛飞之

感激不尽

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值