Nextjs15 基础配置使用

Nextjs15 基础配置使用

起步

注意:node 版本 V18.18 以上

pnpm dlx create-next-app@latest 创建一个nextjs 15项目的基本结构模板

  1. src/app 下文件夹会自动生成应用路由

例如:创建 src/about/page.tsx ,就会自动生成路由 /about, 访问这个路由会自动展示src/about/page.tsx 页面

  1. 也可以创建嵌套路由

例如:src/app/blog/first-post/page.tsx ,就会自动生成路由 /blog/first-post, 访问这个路由会自动展示src/app/blog/first-post/page.tsx 页面

  1. 可以创建动态路由

例如:src/app/products/id/page.tsx, 就会自动生成路由 /products/id, 当访问该路由,则会自动展示src/app/products/[id]/page.tsx 页面。 该页面也可以通过params 获取id 参数

ts 复制代码
const ProductInfo = async ({ params }: { params: { id: string } }) => {
  const { id } = await params
  return <div>products info: {id}</div>
}

export default ProductInfo
  1. 也可以创建文件夹,但是创建路由的时候忽略当前文件夹。

例如:src/app/(auth)/login/page.tsx , 用小括号包裹,此时访问该页面的路由其实是/login

  1. app/latout.tsx 可以书写共享UI
tsx 复制代码
...
export default function RootLayout({
  children
}: Readonly<{
  children: React.ReactNode
}>) {
  return (
    <html lang="en">
      <body
        className={`${geistSans.variable} ${geistMono.variable} antialiased`}
      >
        <header className="bg-slate-900 text-white p-4 text-center">
          <p> Welcome to Nextjs</p>
        </header>
        {children}
        <footer className="bg-slate-900 text-white p-4 text-center">
          Code volution
        </footer>
      </body>
    </html>
  )
}
  1. 其他的page.tsx 文件统计目录下也可以有自己的layout.tsx, 作用是为这个对应路由下提供公共的 layout 布局
tsx 复制代码
const ProductLayout = ({
  children
}: Readonly<{
  children: React.ReactNode
}>) => {
  return (
    <>
      {children}
      <h4>Feature product section</h4>
    </>
  )
}

export default ProductLayout
  1. 可以在src/components 下创建 navigation.tsx 作为导航,引入layout.tsx 供用户跳转路由使用, Link,usePathname 的使用可以观察以下代码
tsx 复制代码
'use client'
import Link from 'next/link'
import { usePathname } from 'next/navigation'

export default function Navigation() {
  const pathname = usePathname()
  const homeClass =
    pathname === '/' ? 'mr-4 text-white-500' : 'mr-4 text-blue-500'
  const aboutClass =
    pathname === '/about' ? 'mr-4 text-white-500' : 'mr-4 text-blue-500'
  const productClass =
    pathname === '/products/1' ? 'mr-4 text-white-500' : 'mr-4 text-blue-500'

  return (
    <nav>
      <Link href="/" className={homeClass}>
        Home
      </Link>
      <Link href="/about" className={aboutClass}>
        About
      </Link>
      <Link href="/products/1" className={productClass}>
        Product 1
      </Link>
    </nav>
  )
}

8.编程式导航

tsx 复制代码
'use client'

import { useRouter } from 'next/navigation'

const About = () => {
  const router = useRouter()

  return (
    <div>
      <h2>About pages</h2>
      <button
        onClick={() => router.push('/')}
        className="bg-blue-500 text-white p-2 rounded-md"
      >
        Go Home
      </button>
    </div>
  )
}

export default About

9.新方式构建构建 API 端点

参考这篇:Nextjs15 构建API端点

相关推荐
HSunR30 分钟前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
拆房老料1 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
Solis程序员2 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明2 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8882 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖3 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34533 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水3 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天4 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
栖凤4 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python