next 从入门到精通

news/2024/12/21 11:03:16/

next 从入门到精通

相关链接

  1. 演示地址 演示地址
  2. 源码地址 源码地址
  3. 获取更多 获取更多
  • hello 大家好,我是 数擎科技,今天来跟大家聊聊 Next.js 如果你遇到任何问题,欢迎联系我 m-xiaozhicloud

什么是 Next.js

  • Next.js 是一个基于 React 的框架,用于构建服务器端渲染(SSR)和静态生成(SSG)的网页应用。它提供了页面路由、API 路由、自动代码拆分等功能,帮助开发者更高效地创建现代 web 应用

项目创建

  1. 自动安装
  • 我们建议使用 启动一个新的 Next.js 应用 create-next-app,它会自动为您设置一切。要创建项目
npx create-next-app@latest
  1. 安装时,您将看到以下提示:
What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a `src/` directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to use Turbopack for `next dev`?  No / Yes
Would you like to customize the import alias (`@/*` by default)? No / Yes
What import alias would you like configured? @/*

路由创建

  • Next.js 使用基于文件系统的路由器,其中使用文件夹来定义路由。
  • 每个文件夹代表一个映射到 URL 段的路由段。要创建嵌套路由,您可以将文件夹相互嵌套。

路由创建
路由创建

  • 浏览器上输入 localhost:3000 你将看到
    alt text

布局和模板

  1. 根布局
  • 布局是在多个路由之间共享的 UI。在导航时,布局保留状态、保持交互性并且不重新渲染。布局也可以嵌套。

根布局

import type { Metadata } from 'next';
import localFont from 'next/font/local';const geistSans = localFont({src: './fonts/GeistVF.woff',variable: '--font-geist-sans',weight: '100 900',
});
const geistMono = localFont({src: './fonts/GeistMonoVF.woff',variable: '--font-geist-mono',weight: '100 900',
});export const metadata: Metadata = {title: 'Create Next App',description: 'Generated by create next app',
};export default function RootLayout({children,
}: Readonly<{children: React.ReactNode,
}>) {return (<html lang="en"><bodyclassName={`${geistSans.variable} ${geistMono.variable} antialiased`}>{children}</body></html>);
}
  1. 模板
  • 模板与布局类似,它们包装子布局或页面。与跨路线持续存在并维护状态的布局不同,模板为导航上的每个子级创建一个新实例。这意味着当用户在共享模板的路由之间导航时,会安装子级的新实例,重新创建 DOM 元素,客户端组件中不会保留状态,并且会重新同步效果。

模板

export default function Template({ children }: { children: React.ReactNode }) {return <div>{children}</div>;
}

布局与模板的区别

  • 模板与布局类似,它们包装子布局或页面。与跨路线持续存在并维护状态的布局不同,模板为导航上的每个子级创建一个新实例。这意味着当用户在共享模板的路由之间导航时,会安装子级的新实例,重新创建 DOM 元素,客户端组件中不会保留状态,并且会重新同步效果。

alt text

元数据

  1. 静态元数据
  • 您可以使用元数据 API 修改 HTML 元素,例如标题和元。
import type { Metadata } from 'next';export const metadata: Metadata = {title: '数擎科技',
};
export default function Home() {return <div>数擎科技</div>;
}
  1. 动态元数据
  • 所有基于配置的元数据选项以及 generateMetadata
import type { Metadata } from 'next';// either Static metadata
export const metadata: Metadata = {title: '...',
};// or Dynamic metadata
export async function generateMetadata({ params }) {return {title: '...',};
}

自定义 404 页面

import Link from 'next/link';export default function NotFound() {return (<div><h2>Not Found</h2><p>Could not find requested resource</p><Link href="/">Return Home</Link></div>);
}

数据获取

  1. 客户端模式获取数据
  • 如果您在此路线的其他任何地方都没有使用任何动态函数,则它将在下次构建静态页面时预渲染。然后可以使用增量静态再生来更新数据。
export default async function Home() {const baseUrl = 'https://cnodejs.org/api/v1';const rsp = await fetch(`${baseUrl}/topics`).then((res) => res.json());return (<div>{rsp.data.map((item: any) => (<h3 key={item?._id}>{item?.title}</h3>))}</div>);
}
  1. 客户端模式获取数据(不推荐)
  • 然而,在某些情况下,客户端数据获取仍然有意义。在这些场景中,您可以在 useEffect 中手动调用 fetch (不推荐),或者依靠社区中流行的 React 库(例如 SWR 或 React Query)进行客户端获取。
'use client';import { useEffect, useState } from 'react';export default function Home() {const [data, setData] = useState([]);const featchTopics = async () => {const baseUrl = 'https://cnodejs.org/api/v1';const rsp = await fetch(`${baseUrl}/topics`).then((rsp) => rsp.json());setData(rsp.data);};useEffect(() => {featchTopics();}, []);return (<div>{data.map((item) => (<h3 key={item._id}>{item.title}</h3>))}</div>);
}

安装 shadcn/ui

  • shadcn/ui:是一个基于 Tailwind CSS 的 UI 组件库,注重高度的可定制性和灵活性。开发者可以轻松修改或扩展组件的样式,使其更符合项目的需求。它专注于不影响项目架构的设计思路,给开发者更多的自由来创建自定义组件。
npx shadcn@latest add button
import { Button } from '@/components/ui/button';export default function Home() {return (<div><Button>Click me</Button></div>);
}

未完待续 。。。。。。。。

联系我们

  1. 关注我们
  1. 联系作者

http://www.ppmy.cn/news/1534299.html

相关文章

ST-GCN模型实现花样滑冰动作分类

加入深度实战社区:www.zzgcz.com&#xff0c;免费学习所有深度学习实战项目。 1. 项目简介 本项目实现了A042-ST-GCN模型&#xff0c;用于对花样滑冰动作进行分类。花样滑冰作为一项融合了舞蹈与竞技的运动&#xff0c;其复杂的动作结构和多变的运动轨迹使得动作识别成为一个具…

抖去推数字人---技术本地服务器技术开发步骤

AI数字人制作流程大致可以分为以下几个关键步骤&#xff1a; 虚拟形象设计&#xff1a;设计虚拟人物的外观和特征&#xff0c;可以手工完成&#xff0c;也可以利用计算机图形学和机器学习算法自动生成。 驱动/动作捕捉&#xff1a;使用动作捕捉技术记录真实演员的动作&#xf…

论文阅读:多模态医学图像融合方法的研究进展

摘要 背景&#xff1a; 多模态融合技术可将多模态的医学图像融合到单模态的图像中&#xff0c;且单模态图像具有多种模态图像间的互补信息&#xff0c; 从而在单一图像中得到充足的便于临床诊断的信息。 贡献&#xff1a; 本文将多模态医学图像融合方法整理为两种&#xff0…

AQS原理(AbstractQueuedSynchronizer)

本篇为 [并发与多线程系列] 的第四篇&#xff0c;对应Java知识体系脑图中的 并发与多线程 模块。 这一系列将对Java中并发与多线程的内容来展开。 AQS原理&#xff08;AbstractQueuedSynchronizer&#xff09; AQS原理&#xff08;AbstractQueuedSynchronizer&#xff09;AQS整…

关系数据库标准语言SQL(11,12)

目录 带有EXISTS谓词的子查询 exists谓词 例子 not exists谓词 例子 不同形式的查询间的替换 用EXISTS/NOT EXISTS实现全称量词 用EXISTS/NOT EXISTS:实现逻辑蕴涵 集合查询 并操作UNION 交操作INTERSECT 差操作EXCEPT 基于派生表的查询 select语句的基本格式 带有…

C(十)for循环 --- 黑神话情景

前言&#xff1a; "踏过三界宝刹&#xff0c;阅过四洲繁华。笑过五蕴痴缠&#xff0c;舍过六根牵挂。怕什么欲念不休&#xff0c;怕什么浪迹天涯。步履不停&#xff0c;便是得救之法。" 国际惯例&#xff0c;开篇先喝碗鸡汤。 今天&#xff0c;杰哥写的 for 循环相…

【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

LeetCode hot100---双指针专题(C++语言)

双指针 (1)快慢双指针 适用于使用双指针进行元素移动&#xff0c;覆盖(2)首尾双指针 计算区域面积&#xff0c;三数之和1、移动0 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#…