Next.js从入门到实战保姆级教程:路由系统详解

NextJs教程系列(一):介绍&安装 Next.js 是一个用于构建全栈 Web 应用程序的 React 框架。您可以使用 React 组件来构建用户界面,并使用 Next.js 来构建其他功能和优化。 阅读详情

本系列文章将围绕Next.js技术栈,旨在为AI Agent开发者提供一套完整的客户端侧工程实践指南。

上一章《项目结构与文件系统约定》介绍了文件系统路由的基本概念,但完整的路由系统包含更多维度:页面间的导航机制、URL 参数的读取与处理、访问权限控制等。本章将系统性地讲解这些核心功能。

一、页面导航机制

Next.js 提供了两种导航方式,分别适用于不同的使用场景。

1. Link 组件:声明式导航

<Link> 组件是 Next.js 中实现页面跳转的首选方案,相较于原生 <a> 标签具有显著优势。

(1)工作原理对比

原生 <a> 标签:触发完整的页面刷新流程

  • 浏览器向服务器重新请求 HTML
  • 重新下载并执行 JavaScript
  • 清空所有应用状态
  • 用户体验存在明显的中断感

<Link> 组件:实现客户端导航(Client-Side Navigation)

  • JavaScript 拦截默认跳转行为
  • 仅获取新页面所需的数据
  • 局部更新 DOM,保留应用状态
  • 导航过程流畅,无白屏闪烁
import Link from 'next/link'

export default function Navigation() {
  return (
    <nav>
      <Link href="/">首页</Link>
      <Link href="/blog">博客</Link>
      <Link href="/about">关于</Link>
    </nav>
  )
}

支持动态路径构建:

{posts.map(post => (
  <Link key={post.id} href={`/blog/${post.slug}`}>
    {post.title}
  </Link>
))}
(2)Link 组件的高级属性

prefetch(预取)
默认情况下,当链接进入视口时,Next.js 会自动预取目标页面的数据。这种优化使得用户点击后几乎无感知延迟即可看到内容。对于访问频率低或数据量大的页面,可禁用预取以节省资源:

<Link href="/rarely-visited-page" prefetch={false}>
  低频访问页面
</Link>

replace(替换历史记录)
默认导航会在浏览器历史记录中添加新条目。某些场景下需要替换当前记录而非追加,例如登录成功后跳转至首页,防止用户通过后退按钮返回登录页:

<Link href="/" replace>
  登录后返回首页
</Link>

scroll(滚动行为控制)
导航完成后默认滚动至页面顶部。若需保持当前滚动位置(如分页筛选场景),可禁用此行为:

<Link href="/blog?tag=react" scroll={false}>
  筛选 React 标签(保持滚动位置)
</Link>

2. useRouter Hook:编程式导航

<Link> 适用于用户主动点击的场景,而 useRouter Hook 则用于代码逻辑触发的导航,如表单提交成功后的跳转、身份验证失败后的重定向等。

'use client'

import { useRouter } from 'next/navigation'

export default function LoginForm() {
  const router = useRouter()

  const handleSubmit = async (formData: FormData) => {
    const result = await login(formData)

    if (result.success) {
      // 使用 replace 避免用户后退时返回登录页
      router.replace('/')
    }
  }

  return <form action={handleSubmit}>...</form>
}
useRouter API 概览
const router = useRouter()

router.push('/dashboard')       // 导航至指定路径,添加历史记录
router.replace('/dashboard')    // 导航至指定路径,替换历史记录
router.back()                   // 后退(等同于浏览器后退按钮)
router.forward()                // 前进
router.refresh()                // 刷新当前路由(重新获取服务端数据)
router.prefetch('/heavy-page')  // 手动预取指定页面

重要提示:useRouter 应从 next/navigation 导入,而非 next/router(后者属于已废弃的 Pages Router)。这是初学者常见的错误,TypeScript 可能不会报错,但运行时行为会异常。


二、URL 参数处理

URL 中携带的信息主要分为两类:路径参数(Dynamic Segments)和查询参数(Search Params)。Next.js 提供了相应的工具来读取和处理这些信息。

1. 路径参数(Dynamic Segments)

路径参数指 URL 路径中的动态部分,如 /blog/my-post 中的 my-post。

(1)服务端组件中读取

在服务端组件中,路径参数通过 params prop 传递:

// src/app/blog/[slug]/page.tsx
export default async function BlogPost({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const { slug } = await params
  const post = await getPostBySlug(slug)

  return (
    <article>
      <h1>{post.title}</h1>
      {/* 文章内容 */}
    </article>
  )
}

注意:在 Next.js 15+ 版本中,params 是一个 Promise,需要使用 await 解包。

(2)客户端组件中读取

在客户端组件中,使用 useParams Hook:

'use client'
import { useParams } from 'next/navigation'

export function PostActions() {
  const params = useParams<{ slug: string }>()
  // params.slug 即为当前 URL 中的路径参数值
  
  return <button>分享文章</button>
}

2. 查询参数(Search Params)

查询参数位于 URL 的 ? 之后,常用于筛选、搜索、分页等场景,如 /blog?page=2&tag=react。

(1)服务端组件中读取
// src/app/blog/page.tsx
export default async function BlogPage({
  searchParams,
}: {
  searchParams: Promise<{ page?: string; tag?: string; q?: string }>
}) {
  const { page = '1', tag, q } = await searchParams

  const posts = await getPosts({
    page: parseInt(page),
    tag,
    query: q,
  })

  return (
    <div>
      {q && <p>搜索结果:"{q}"</p>}
      {/* 文章列表 */}
    </div>
  )
}
(2)客户端组件中读取与更新

在客户端组件中,结合 useSearchParams、usePathname 和 useRouter 实现查询参数的读取与更新:

'use client'

import { useSearchParams, useRouter, usePathname } from 'next/navigation'

interface TagFilterProps {
  tags: string[]
}

export function TagFilter({ tags }: TagFilterProps) {
  const searchParams = useSearchParams()
  const pathname = usePathname()
  const router = useRouter()
  const currentTag = searchParams.get('tag')

  const handleTagClick = (tag: string) => {
    const params = new URLSearchParams(searchParams.toString())

    if (tag === currentTag) {
      params.delete('tag')  // 取消选中
    } else {
      params.set('tag', tag)
      params.delete('page')  // 切换标签时重置页码
    }

    router.push(`${pathname}?${params.toString()}`)
  }

  return (
    <div className="flex gap-2 flex-wrap">
      {tags.map(tag => (
        <button
          key={tag}
          onClick={() => handleTagClick(tag)}
          className={`px-3 py-1 rounded-full text-sm ${
            tag === currentTag
              ? 'bg-blue-500 text-white'
              : 'bg-gray-100 text-gray-700'
          }`}
        >
          {tag}
        </button>
      ))}
    </div>
  )
}

使用查询参数的优势:

  • URL 状态可分享,用户可将筛选结果发送给他人
  • 页面刷新后状态不丢失
  • 支持浏览器前进/后退操作
  • 有利于 SEO,搜索引擎可索引不同的筛选视图

三、当前导航项高亮

导航栏中高亮显示当前页面是常见需求,可通过 usePathname Hook 实现:

'use client'

import Link from 'next/link'
import { usePathname } from 'next/navigation'

const navItems = [
  { href: '/', label: '首页' },
  { href: '/blog', label: '博客' },
  { href: '/about', label: '关于' },
]

export function Navbar() {
  const pathname = usePathname()

  return (
    <nav className="flex gap-6">
      {navItems.map(item => {
        // 首页精确匹配,其他页面前缀匹配
        const isActive = item.href === '/'
          ? pathname === '/'
          : pathname.startsWith(item.href)

        return (
          <Link
            key={item.href}
            href={item.href}
            className={`text-sm font-medium transition-colors ${
              isActive
                ? 'text-blue-600 border-b-2 border-blue-600'
                : 'text-gray-600 hover:text-gray-900'
            }`}
          >
            {item.label}
          </Link>
        )
      })}
    </nav>
  )
}

四、静态参数预生成(generateStaticParams)

对于动态路由,如果已知所有可能的参数值(如博客文章的所有 slug),可使用 generateStaticParams 在构建阶段预生成静态页面(SSG),而非每次请求时实时渲染。

// src/app/blog/[slug]/page.tsx

// 构建阶段执行,返回需要预生成的所有参数组合
export async function generateStaticParams() {
  const posts = await getAllPosts()
  return posts.map(post => ({ slug: post.slug }))
}

export default async function BlogPost({
  params,
}: {
  params: Promise<{ slug: string }>
}) {
  const { slug } = await params
  const post = await getPostBySlug(slug)
  
  return (
    <article>
      <h1>{post.title}</h1>
      {/* 文章内容 */}
    </article>
  )
}

优势:

  • 生成纯静态 HTML 文件,CDN 直接分发
  • 访问速度极快,无需服务器计算
  • 降低服务器负载
  • 适用于博客、文档、产品列表等内容相对稳定的场景

五、并行路由(Parallel Routes)

某些复杂界面需要同时展示多个独立的内容区域,每个区域拥有独立的加载状态和错误处理。例如仪表盘中同时显示用户统计、销售图表和最新订单。Next.js提供了并行路由来处理这类需求。

1. 目录结构

使用 @ 前缀创建命名插槽(Slots):

src/app/dashboard/
├── layout.tsx           # 布局组件
├── page.tsx             # 主页面
├── @stats/
│   ├── page.tsx         # 统计数据
│   └── loading.tsx      # 加载状态
├── @chart/
│   ├── page.tsx         # 图表数据
│   └── loading.tsx      # 加载状态
└── @recent/
    ├── page.tsx         # 最新订单
    └── loading.tsx      # 加载状态

2. 布局组件实现

并行路由的插槽会跟children属性一起传递给布局组件:

// src/app/dashboard/layout.tsx
export default function DashboardLayout({
  children,
  stats,
  chart,
  recent,
}: {
  children: React.ReactNode
  stats: React.ReactNode
  chart: React.ReactNode
  recent: React.ReactNode
}) {
  return (
    <div className="grid grid-cols-2 gap-6">
      <div className="col-span-2">{stats}</div>
      <div>{chart}</div>
      <div>{recent}</div>
    </div>
  )
}

核心价值:各插槽独立加载,互不阻塞。@stats 数据加载完成即可显示,无需等待 @chart 或 @recent,显著提升用户体验。


六、拦截路由(Intercepting Routes)

在某些场景下,我们希望用户点击一个链接时,不是跳转到一个全新的页面,而是在当前页面的上下文中(例如通过一个模态框)展示目标内容。同时,这个内容又拥有自己独立的 URL,可以被直接访问或分享。Next.js 的拦截路由正是为了解决这种“上下文相关导航”而设计的。

1. 核心概念

拦截路由允许你拦截一个原本要跳转的路由,并在当前布局中渲染一个替代组件,例如:

  • 拦截时:用户从 /photos 点击一张照片,URL 变为 /photos/123,但内容以模态框形式叠加在 /photos 页面上。
  • 直接访问时:用户直接在浏览器地址栏输入 /photos/123 或刷新页面,则会完整渲染 /photos/123 的独立页面。

这完美实现了类似 Instagram 或 Dribbble 的图片浏览体验:在信息流中点击是弹窗,直接访问链接是详情页。

2. 目录结构与命名约定

拦截路由通过特殊的文件夹命名来实现,使用括号 () 和点 . 来表示相对路径关系:

  • (.):匹配同一层级的路由。
  • (..):匹配上一层级的路由。
  • (..)(..):匹配上上层级的路由。
  • (...):匹配根目录 app/ 下的路由。

通常,拦截路由会与并行路由(@slot)结合使用,将拦截到的内容渲染在模态框插槽中。

3. 实战案例:图片详情模态框

假设我们有一个图片列表页 /photos,点击任意图片应弹出详情模态框,URL 变为 /photos/[id]。

文件结构如下:

src/app/
├── layout.tsx                     # 根布局
├── photos/
│   ├── page.tsx                   # 图片列表页 (/photos)
│   └── [id]/
│       └── page.tsx               # 图片详情页 (/photos/[id]) - 直接访问时渲染
└── @modal/                        # 并行路由插槽,用于模态框
    └── (..)photos/                # 拦截上一层级的 photos 路由
        └── [id]/
            └── page.tsx           # 拦截后的模态框组件

代码实现:

// src/app/photos/[id]/page.tsx
// 这是 /photos/[id] 的独立页面,直接访问时显示
export default function PhotoPage({ params }: { params: { id: string } }) {
  return (
    <div className="p-8">
      <h1>照片详情 #{params.id}</h1>
      <Photo image-id={params.id}/> <!-- 假如已存在该组件-->
      <p>这是照片的完整详情页面。</p>
    </div>
  )
}

// src/app/@modal/(..)photos/[id]/page.tsx
// 这是拦截路由,从 /photos 跳转时显示
export default function PhotoModal({ params }: { params: { id: string } }) {
  return (
    <dialog open className="fixed inset-0 bg-black/80 flex items-center justify-center">
      <div className="relative">
        <Photo image-id={params.id}/> <!-- 假如已存在该组件-->
        <button className="absolute top-4 right-4 text-white">关闭</button>
      </div>
    </dialog>
  )
}

布局组件配置:

为了让模态框能正确显示,需要在根布局中定义 modal 插槽。

// src/app/layout.tsx
export default function RootLayout({
  children,
  modal,
}: {
  children: React.ReactNode
  modal: React.ReactNode
}) {
  return (
    <html>
      <body>
        {children}
        {modal}
      </body>
    </html>
  )
}

处理未匹配状态:

当用户直接访问 /photos/123 时,@modal 插槽没有匹配到任何内容,Next.js 会尝试渲染 default.tsx。为了避免显示 404,我们创建一个返回 null 的默认文件。

// src/app/@modal/default.tsx
export default function Default() {
  return null
}

/photos (列表页)

命中 @modal/(..)photos/[id]

直接输入 /photos/123

否 (无 @modal 上下文)

用户操作

当前路径是?

点击某张图片

URL 变为 /photos/123

拦截路由匹配

渲染模态框组件

显示模态框: 图片详情

背景保持: /photos 列表页

是否匹配拦截器?

渲染默认页面

渲染: photos/[id]/page.tsx

显示全屏详情页

4. 核心价值

  • 保持上下文:用户在浏览列表时不会丢失当前位置,体验更流畅。
  • 可分享的 URL:模态框中的内容拥有独立的 URL,可以直接复制链接分享给他人。
  • 渐进增强:直接访问链接时,内容依然可以完整展示,保证了功能的健壮性。

七、中间件:路由守卫与权限控制

保护需要身份验证才能访问的页面,最优雅的实现方式是使用中间件(Middleware),在请求到达页面组件之前进行拦截和验证。

1. 中间件实现

在项目根目录(与 src/ 同级)创建 middleware.ts:

// middleware.ts
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'
import { auth } from '@/lib/auth'  // 认证工具

export default async function middleware(request: NextRequest) {
  const session = await auth()
  const { pathname } = request.nextUrl

  // 定义需要保护的路径
  const protectedPaths = ['/dashboard', '/profile', '/settings']
  const isProtected = protectedPaths.some(path => pathname.startsWith(path))

  // 未登录用户访问受保护路径,重定向至登录页
  if (isProtected && !session) {
    const loginUrl = new URL('/login', request.url)
    loginUrl.searchParams.set('callbackUrl', pathname)
    return NextResponse.redirect(loginUrl)
  }

  // 已登录用户访问登录页,重定向至首页
  if (session && pathname === '/login') {
    return NextResponse.redirect(new URL('/', request.url))
  }

  return NextResponse.next()
}

// 配置中间件匹配规则
// 排除静态资源和 API 路由(它们有独立的权限控制)
export const config = {
  matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
}

当然中间件除了做权限认证外,所有需要在用户访问与服务器层之间实现的逻辑,都可以使用中间件来承担。

2. 中间件的优势

  • 在服务器端执行,安全性高
  • 统一处理权限逻辑,避免遗漏
  • 在页面组件渲染前拦截,性能更优
  • 支持复杂的条件判断和重定向策略

八、重定向机制

Next.js 提供了多种重定向方式,适用于不同场景。

1. 组件内重定向

import { redirect, permanentRedirect } from 'next/navigation'

// 临时重定向(HTTP 307)
// 适用场景:登录后跳转、表单提交后跳转
async function ProtectedPage() {
  const user = await getUser()
  if (!user) {
    redirect('/login')
  }
  // ...
}

// 永久重定向(HTTP 308)
// 适用场景:URL 迁移,告知搜索引擎更新索引
function OldBlogPost() {
  permanentRedirect('/blog/new-url-here')
}

2. 配置文件重定向

对于批量 URL 重定向(如域名迁移),可在 next.config.ts 中统一配置:

// next.config.ts
const nextConfig = {
  async redirects() {
    return [
      {
        source: '/old-blog/:slug',
        destination: '/blog/:slug',
        permanent: true,  // true = 308 永久重定向,false = 307 临时重定向
      },
      {
        source: '/team',
        destination: '/about#team',
        permanent: false,
      },
    ]
  },
}

export default nextConfig

配置文件重定向的优势:

  • 在请求层面处理,效率更高
  • 对 SEO 更友好
  • 集中管理,便于维护

九、路由系统架构总览

将本章所学内容整合为完整的请求处理流程:

未授权

已授权

数据错误

页面不存在

成功

用户请求 URL

中间件检查权限

重定向至登录页

匹配布局层级

显示 loading.tsx

执行 page.tsx 获取数据

显示 error.tsx

显示 not-found.tsx

渲染至浏览器

Next.js 的路由系统不仅是"URL 到页面的映射",而是一个完整的请求处理流水线,每个环节都提供了扩展点供开发者定制。


十、本章小结

通过本章学习,你应该掌握了:

  • 两种导航方式(Link 组件与 useRouter)的使用场景
  • 路径参数和查询参数的读取与处理方法
  • 静态参数预生成的优化策略
  • 并行路由、拦截路由实现复杂布局的技巧
  • 中间件实现路由守卫的最佳实践
  • 不同重定向方式的适用场景

对客户端而言光有界面还不行,还得有数据。下一章《Next.js数据获取与缓存策略》将深入探讨数据获取机制——这是 Next.js 与传统 React 应用差异最大的核心特性之一。

Next.js 独立开发教程 (五):创建布局和页面 在 Web 开发中,页面和布局的设计是构建用户界面(UI)的核心任务。Next.js 通过其内置的文件路由系统和组件架构,使开发者能够轻松创建功能丰富的页面和可复用的布局。这篇文章将详细讲解如何使用 Next.js 构建页面与布局,并结合实践案例,帮助您在仪表盘项目中快速掌握这些技能。 阅读详情

相关推荐

新人向:Remix 和 Next.js架构的对比

Remix 和 Next.js 都是基于 React 的全栈框架,但在路由系统、数据获取、表单处理和错误处理等方面有显著差异。路由方面,Remix 采用嵌套路由设计,父路由可共享数据和布局,而 Next.js 的嵌套路由更侧重 UI 复用。数据获取上,Remix 通过 loader/action 分离逻辑,Next.js 允许组件内直接写异步代码。表单处理时,Remix 内置 Form 组件简化提交流程,Next.js 需手动管理 API 请求。错误处理方面,Remix 区分数据错误和渲染错误,Next.j

jobleap.cn求职助手首页 1299

走近 Next.js:全栈框架的简介与应用

微信搜索“”关注公众号。

王乐平 技术博客 5247

Next.js 核心特性详解:为什么它是现代 Web 开发的终极选择?

在当今快速发展的 Web 开发领域,选择一个高效、灵活且功能强大的框架至关重要。Next.js 作为基于 React 的全栈框架,凭借其卓越的性能、丰富的渲染策略和出色的开发者体验,已成为构建现代 Web 应用的首选之一。 本文将深入探讨 Next.js 的核心特性,涵盖其渲染模式、路由系统、性能优化、全栈能力等方面,帮助你全面理解它的优势,并指导你如何在实际项目中充分利用这些功能。

vvilkin的学习备忘 1606

Nextjs

一、Next.js 介绍 Next.js 是 React 服务端渲染应用框架. 用于构建 SEO 友好的 SPA 应用. 支持两种预渲染方式, 静态生成和服务器端渲染. 基于页面的路由系统, 路由零配置 自动代码拆分. 优化页面加载速度. 支持静态导出, 可将应用导出为静态网站. 内置 CSS-in-JS 库 styled-jsx 方案成熟, 可用于生产环境, 世界许多公司都在使用 应用部署简单, 拥有专属部署环境 Vercel, 也可以部署在其他环境 二、创建 Next.js 项目 创建: npm i

woyebuzhidao321的博客 1万+

Next.js 入门的详细指南

Next.js 是一个基于 React 的框架,提供了服务器端渲染(SSR)和静态站点生成(SSG)功能。文件系统路由:基于文件的路由系统。服务器端渲染:提高 SEO 和性能。静态站点生成:预渲染静态页面。API 路由:轻松创建 API 端点。内置 CSS 和 Sass 支持:支持多种样式解决方案。你可以自定义 Next.js 的 HTML 文档结构。

luckucu的博客 1218

Gromacs实战:从蛋白质-小分子对接到分子动力学模拟全流程解析

本文详细解析了使用Gromacs进行蛋白质-小分子复合物分子动力学模拟的全流程。从处理AutoDock等对接软件的结果文件开始,逐步指导如何为蛋白质和小分子分别生成拓扑文件,并解决力场合并的核心挑战。文章涵盖了构建模拟盒子、添加溶剂离子、能量最小化、平衡模拟以及关键的轨迹分析步骤,为计算生物学和药物设计研究者提供了一套从静态对接到动态评估的完整实战指南。

weixin_29251337的博客 1219

Next.js入门教程

Next.js完整指南

一+一加1的博客 1万+

Xilinx FPGA 100G RDMA开发实战:基于AXI Lite配置的ROCE V2高速通信系统搭建

本文详细介绍了在Xilinx FPGA上搭建100G ROCE V2高速通信系统的实战过程。通过分析RDMA技术优势与FPGA实现的必要性,重点阐述了基于AXI Lite接口配置ERNIC IP核的关键步骤,包括硬件系统构建、驱动开发及与商用网卡的互通测试,旨在实现兼具高性能与灵活性的网络加速方案。

js777的博客 576

Next.js声明式路由系统教程

Next.js声明式路由系统教程 项目介绍 ProNextJS/declarative-routing 是一个专为Next.js设计的类型安全路由系统。它通过建立一个全局页面与API路由的清单,简化了React或QwikCity项目中的导航和API请求过程。该库鼓励采取声明式的方式来管理路由,从而提高开发时的可读性和可维护性,确保路由定义的类型安全性。 项目快速启动 要快速开始使用declarat...

gitblog_01112的博客 722

YOLO26优化:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 365

SGP4/SDP4详解

**SGP4** (Simplified General Perturbations Version 4) 和 **SDP4** (Simplified Deep-space Perturbations Version 4) 是一组**解析轨道预报模型**,用于预测地球轨道卫星的位置和速度。它们是北美防空司令部(NORAD)维护的**TLE**数据格式的标准配套算法。 简单来说:**TLE是卫星轨道的"身份证",而SGP4/SDP4是解读这张身份证的"说明书"**。

ScilogyHunter的博客 589

Next.js从入门到实战保姆级教程:导读——建立 Next.js 的认知框架

Next.js 框架全面介绍,涵盖核心特性、技术优势、应用场景及学习路径,帮助开发者建立完整的认知框架。

FrontAI的博客 854

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——windows应急响应篇

保护数据,捍卫安全,展现技能,赢得荣耀!全国职业技能大赛-信息安全与评估大赛,挑战你的技术,揭示黑客的秘密!加入我们,成为信息安全的守护者!

人若无名,便可专心练剑 908

Next.js 学习 - 路由系统(Routing)

Next.js 的路由系统基于文件系统,这意味着文件和文件夹的结构决定了 URL 路径。相较于传统的 React 应用中的路由配置,Next.js 的文件路由系统非常简洁和自动化。

Chloeeeeeeee的博客 1721

【笔记篇】Davinci Configurator BswM模块

AUTOSAR BSWM模块配置介绍

weixin_47571898的博客 1534

YOLOv8改进 | 独家创新篇 | 给YOLOv8增加辅助可逆分支结构(PGI,1:1改进)(全网独家创新,附视频讲解)

这张图(图3)展示了可编程梯度信息(PGI)及其相关网络架构和方法。这种网络结构主要用于改进特征融合,以提高目标检测的性能。然而,由于信息瓶颈的存在,网络中可能会丢失一些信息。这是一种旨在减少信息丢失的网络设计。它通过可逆的列结构来尝试维持信息流通不受损失,但如图中“Heavy Cost”所示,这种结构会增加计算成本。c) 深度监督:这种方法通过在网络的多个层次中插入额外的监督信号来提高学习的效率和最终模型的性能。图中显示了通过深度监督连接的各个层。

Snu77的博客 3744

Next.js面试常问内容详解

Next.js 的混合渲染能力如同一把精密的多功能工具刀。理解 SSR、SSG、ISR 的底层差异(如 SSR 的 ReactDOMServer.renderToString() 流程 或 ISR 的增量更新机制),才能根据业务场景灵活组合。本文将深入解析服务端渲染(SSR)、静态站点生成(SSG)和增量静态再生(ISR)的核心原理与实战应用,帮助开发者构建高性能应用。◦ Pages Router:传统路由,文件路径即路由(如 pages/about.js → /about)。

警警的博客 1328

杰理AC696N系列芯片,烧录的时候烧录器连接上芯片之后电脑显示无法识别该设备,该怎么解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1713

Next.js知识框架图& Next.js路由详解

Next.js 的核心优势在于灵活选择渲染模式与极简的全栈开发体验。作为 React 开发者,需重点掌握路由系统、数据获取策略及性能优化技巧。推荐从官方示例项目入手,逐步过渡到复杂场景(如电商、管理后台)。Next.js 的路由系统以极简配置和高性能为核心,支持从简单静态站点到复杂全栈应用的开发需求。动态路由与数据获取策略的合理搭配;利用中间件和布局优化用户体验;根据场景选择 App Router 或 Pages Router。建议参考Next.js 官方文档深入实践路由高级功能。

警警的博客 1508

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Next.js路由系统

Next.js作为React生态系统中最受欢迎的框架之一,其路由系统经历了从传统客户端路由到服务端路由的演进,最终形成了当前基于文件系统的两种路由系统:应用路由(App Router)和页面路由(Pages Router)。这两种路由系统各有特点,适用于不同场景,共同构成了Next.js强大的路由能力。本文将详细介绍Next.js最新路由系统的实现方式,从最基础的静态路由到复杂的动态路由、API路由和权限控制,每种情况都提供文件路径结构说明和代码示例,帮助开发者全面掌握Next.js路由的使用方法。Next

ya3288426755的博客 434

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Next.js从入门到实战保姆级教程:错误处理与加载状态

系统讲解 Next.js 的错误边界体系与加载状态管理,掌握 error.tsx、loading.tsx、not-found.tsx 等特殊文件,构建健壮的用户体验。

FrontAI的博客 505

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

001 Next.js教程—— 项目搭建

Next.js 14项目搭建与核心架构指南 摘要:本文详细介绍了Next.js 14项目的安装方法和核心目录结构。使用npx create-next-app@latest命令可快速搭建支持TypeScript、ESLint和Tailwindcss的项目。重点解析了App Router架构下的目录组织,包括动态路由、路由组、并行路由等高级特性,以及服务器组件的数据获取方式。文章还对比了SSR/SSG/ISR等渲染模式的配置方法,并提供了metadata API、中间件等关键功能的实现示例。

m0_73950008的博客 795

Next.js 项目 保姆级入门!!!!!!

本文介绍了如何使用 Next.js 框架创建一个简单的 TodoList 应用。首先,通过 create-next-app 工具初始化项目,并选择 TypeScript、ESLint、Tailwind CSS 等配置。接着,解释了 Next.js 13+ 的文件系统路由机制,展示了如何通过文件夹结构自动生成路由。最后,详细演示了如何实现一个 TodoList 页面,包括添加、切换完成状态和删除待办事项的功能。整个过程涵盖了客户端组件的使用、状态管理以及基本的 UI 交互,适合初学者快速上手 Next.js

Mr. Zhang Xiaojian's Blog 1420

Next.js从入门到实战保姆级教程:数据获取与缓存策略

深入理解 Next.js 的数据获取哲学:服务端数据获取、多层缓存机制、流式渲染与 Suspense、按需重新验证,以及选择合适策略的思维框架。

FrontAI的博客 809

Next.js路由系统终极指南:从Pages Router到App Router的平滑迁移

你是否还在为Next.js项目中两种路由系统并存而困惑?是否纠结于新项目该选择App Router还是继续使用Pages Router?本文将通过实际案例对比两种路由系统的核心差异,帮助你在30分钟内掌握最佳实践,轻松应对项目迁移与开发挑战。 ## 路由系统演进概述 Next.js作为React框架(The React Framework),其路由系统经历了从Pages Router到App ...

gitblog_00283的博客 887

Next.js入门|一文带你梳理清楚 Next.js 的功能

前面写了好几篇关于 Next.js 的文章,虽然都不长,但都是实际使用过程中的一些经验分享,不过这些文章对于不了解 Next.js 的人来说,可能很不友好,我也一直想重新梳理一下 Next.js 使用的方案。因此打算好好写一下 Next.js 相关运用,并整理到一个专栏,主要内容会从了解 Next.js 开始,然后逐渐搭建一个完整的项目模板,让没怎么接触过 Next.js 甚至 React 的小伙...

程序员成长指北 5039
上一篇: Next.js从入门到实战保姆级教程:项目结构与文件系统约定
下一篇: Next.js从入门到实战保姆级教程:数据获取与缓存策略
FrontAI
博客等级 码龄1年 61粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值