React + Next.js 搭建项目(配有对比介绍一起食用)

文章标题

  • 01 Next.js 是什么
  • 02 Next.js 搭建工具 create-next-app
  • 03 create-react-app 与 create-next-app 的区别
  • 04 快速构建 Next.js 项目
  • 05 App Router 与 Pages Router 的区别

01 Next.js 是什么

Next.js 是一个 React 框架,它允许你使用 React 框架建立超强的、有利于 SEO 的、极度面向用户的静态网站和网络应用。Next.js 以在构建具有你所需要的所有功能的生产就绪的应用程序时的最佳开发者体验而闻名。

它具有混合静态和服务器渲染、TypeScript支持、智能捆绑、路由预取等功能,无需额外配置。

02 Next.js 搭建工具 create-next-app

官方建议使用 create-next-app 创建新的 Next.js 应用程序,它会自动为你设置所有内容。创建项目,请运行:

# 确保你已经安装了 npx (npx 从 npm 5.2.0 开始默认安装)
npx create-next-app
# or
yarn create next-app

03 create-react-app 与 create-next-app 的区别

create-react-app
简介:它是 React 团队官方出的一个构建 React 单页面应用的脚手架工具,即一个官方支持的创建 React 单页应用程序的方法。
集成:它本身集成了 Webpack,并配置了一系列内置的 loader 和默认的 npm 的脚本,可以很轻松的实现零配置就可以快速开发 React 的应用。
优势官方出品、零配置、简单轻松上手易于学习、易于部署
缺点:需要手动配置路由&状态管理&代码分割&样式文件等、对搜索引擎优化不好
create-next-app
简介:它由 Next.js 的创建者正式维护,能够快速开始构建新的 Next.js 应用程序,并为您设置好一切,并包括交互式体验、零依赖、离线支持等好处。
优势官方推荐、零配置、对 SEO 友好、支持服务器端预渲染
缺点:使用起来更复杂、扩展取依赖于服务器、没有丰富的插件生态系统

04 快速构建 Next.js 项目

$ npx create-next-app# 若还未安装 create-next-app ,则需要先安装以下软件包:
Need to install the following packages:create-next-app
Ok to proceed? (y) y# 项目名称
√ What is your project named? ... my-app# 是否需要使用 TypeScript
√ Would you like to use TypeScript? ... No / Yes ✔# 是否需要使用 ESLint 
√ Would you like to use ESLint? ... No / Yes ✔# 是否需要使用 Tailwind CSS(https://www.tailwindcss.cn/)只需书写 HTML 代码,无需书写 CSS
# 本质上是一个工具集,包含了大量类似 flex、 pt-4、 text-center 以及 rotate-90 等工具类,可以组合使用并直接在 HTML 代码上实现任何 UI 设计。
√ Would you like to use Tailwind CSS? ... No / Yes ✔# 是否需要在项目中使用 src 目录,若不使用 src 目录默认会把所有文件放在根目录,为了方便开发,这里启用 src 目录
√ Would you like to use `src/` directory? ... No / Yes ✔# 是否使用 App Router,若选择 No 则默认是 Pages Router(具体区别在下面,可以先简单看下再选择)
√ Would you like to use App Router? (recommended) ... No ✔ / Yes# 是否启用路径别名 
√ Would you like to customize the default import alias? ... No / Yes ✔# 希望配置什么导入别名(默认是 @/*,若不修改默认别名则直接回车)
√ What import alias would you like configured? ... @/*# 完成配置选择后,下面工具将会根据上述配置进行项目搭建
Creating a new Next.js app in E:\xxx\my-app.Using npm.
# 若上述选择了 App Router 则模板初始化项目为 app-tw,若没选择则模板初始化项目为 default-tw
#(下面会展示对应模板的初始化目录)
Initializing project with template: default-twInstalling dependencies:
- react
- react-dom
- next
- typescript
- @types/react
- @types/node
- @types/react-dom
- tailwindcss
- postcss
- autoprefixer
- eslint
- eslint-config-nextadded 326 packages, and audited 327 packages in 2m117 packages are looking for fundingrun `npm fund` for detailsfound 0 vulnerabilities
Initialized a git repository.Success! Created my-app at E:\xxx\my-app

搭建成功后,切换到对应目录即可运行项目了

$ npm run dev
# or
$ yarn dev
# or
$ pnpm dev

05 App Router 与 Pages Router 的区别

App Router:在 src 目录下启用 app 目录,默认会放一些框架相关的东西,并在该目录中生成首页内容(src/app/page.tsx)
1) 简介:在版本13中,Next.js 引入了一个新的基于 React Server 组件的应用路由器,它支持共享布局、嵌套路由、加载状态、错误处理等等。App Router 工作在一个名为 app 的新目录中。app 目录与 pages 目录一起工作,以允许增量采用。这允许你选择应用程序的一些路由为新行为,同时将其他路由保留在pages目录中为以前的行为。
2) 注意App 路由器优先于 Pages 路由器。跨目录的路由不应该解析为相同的 URL 路径,这样会导致构建时报错来防止冲突。
3) 补充:在 App Router 中,NextJS 将会区分 Client 组件和 Server 组件。 Server 组件是一种特殊的 React 组件,它 不在浏览器端运行,而是只能在服务器端运行。又因为它们没有状态,所以不能使用只存在于客户端的特性(也就是说 useState、useEffect 那些都是用不了的),所以一般我们可以用于获取数据,或者对组件进行渲染(比如你要渲染 markdown 那对应的 JavaScript 依赖就只存在于客户端),从而达到减少客户端体积的作用,这是一种性能优化,允许您轻松地采用它们。同时默认情况下,app 中的组件是Server 组件,但您还可以使用客户端组件,若要使用客户端组件就需要加上 use client,但实际上这个命令时候影响到子组件的,也就是说如果你父组件加上了 use client,那么这个文件下所有的子组件就算不加上这个指令,那它也是客户端组件了,为此我们需要合理规划 Layout,把客户端端组件利用 Layout 给抽离出去。
4) 建议: 如果您是服务器组件的新手,请查看 服务器组件和客户端组件相关信息。
5) 选择该模式后的初始化目录结构如下
使用 App Router 的目录结构
PagesRouter:在 src 目录下启用 pages 目录,默认会放 api 等文件,并在该目录中生成首页内容(src/pages/index.tsx)。
1) 简介:Pages Route r有一个基于文件系统的路由器,它基于页面的概念。当一个文件被添加到 pages 目录时,它会自动作为路由可用。在 Next.js 中,页面是从 pages 目录下的 .js.jsx.ts.tsx 文件中导出的 React 组件,每个页面都根据其文件名与路由相关联。(也是大家之前可能常用的一种模式)
2) 选择该模式后的初始化目录结构如下
使用 Pages Router 的目录结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vueelementui动态渲染Radio,Checkbox,笔记

<div id"app"><el-card style"width: 300px"><el-form label-position"top" size"mini"><el-form-item label"标题"><el-input></el-input></el-form-item><el-form-item v-f…

程序的编译链接【编译链接大概步骤】

全文目录 &#x1f600; 前言&#x1f642; 翻译环境和执行环境&#x1f636; 编译和链接&#x1f635;‍&#x1f4ab; 预编译&#xff08;预处理&#xff09;&#x1f635;‍&#x1f4ab; 编译&#x1f635;‍&#x1f4ab; 汇编&#x1f635;‍&#x1f4ab; 链接 &#x1…

分布式定时任务框架Quartz总结和实践(2)—持久化到Mysql数据库

本文主要介绍分布式定时任务框架Quartz集成SpringBoot持久化数据到Mysql数据库的操作&#xff0c;上一篇文章使用Quartz创建定时任务都是保存在内存中&#xff0c;如果服务重启定时任务就会失效&#xff0c;所以Quartz官方也提供将定时任务等信息持久化到Mysql数据库的功能&…

【ES6】—数组的扩展

一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组&#xff0c;有长度的属性&#xff0c;但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…

Git gui教程---第七篇 Git gui的使用 返回上一次提交

1&#xff0e; 查看历史&#xff0c;打开gitk程序 2&#xff0e; 选中需要返回的版本&#xff0c;右键&#xff0c;然后点击Rest master branch to here 3.出现弹窗 每个选项我们都试一下&#xff0c;从Hard开始 返回的选项 HardMixedSoft Hard 会丢失所有的修改【此处的…

从0开始做yolov5模型剪枝

文章目录 从0开始做yolov5模型剪枝 ****1 前言2 GitHub取源码3 原理3.1 原理3.2 network slimming过程 4 具体实施步骤4.1 安装虚拟环境4.2 配置参数4.2.1 数据集参数4.2.2 模型结构参数4.2.3 train.py中的参数 4.3 正常训练4.3.1 准备4.3.2 训练及问题解决 4.4 稀疏化训练4.4.…

VbScript脚本Request获取RFID读卡器以HTTP提交的访问文件中的参数Response回应驱动读卡器显示、播报语音

本示例使用的设备&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) <%LANGUAGE"VBSCRIPT" CODEPAGE"65001"%><% Function bin2str(bindata)Dim rsStream, strlsSet rsStream Server.CreateObject…

今天不想学习

【深基16.例1】淘汰赛 - 洛谷 根据队列知识&#xff0c;和巧用题目信息&#xff0c;代码都很简单哈哈哈&#xff0c;因为我会的不多 #include<iostream> #include<queue> #include<map> using namespace std; #define int long long int n,num1; signed ma…

Leetcode 2235.两整数相加

一、两整数相加 给你两个整数 num1 和 num2&#xff0c;返回这两个整数的和。 示例 1&#xff1a; 输入&#xff1a;num1 12, num2 5 输出&#xff1a;17 解释&#xff1a;num1 是 12&#xff0c;num2 是 5 &#xff0c;它们的和是 12 5 17 &#xff0c;因此返回 17 。示例…

数据库管理

SQL语言分类&#xff1a; DDL&#xff1a;数据定义语言&#xff0c;用于创建数据库对象&#xff0c;如库、表、索引等 DML&#xff1a;数据操纵语言&#xff0c;用于对表中的数据进行管理 DQL&#xff1a;数据查询语言&#xff0c;用于从数据表中查找符合条件的数据记录 DCL&am…

渗透测试方法论

文章目录 渗透测试方法论1. 渗透测试种类黑盒测试白盒测试脆弱性评估 2. 安全测试方法论2.1 OWASP TOP 102.3 CWE2.4 CVE 3. 渗透测试流程3.1 通用渗透测试框架3.1.1 范围界定3.1.2 信息搜集3.1.3 目标识别3.1.4 服务枚举3.1.5 漏洞映射3.1.6 社会工程学3.1.7 漏洞利用3.1.8 权…

[LitCTF 2023]Flag点击就送!

进入环境后是一个输入框&#xff0c;可以提交名字 然后就可以点击获取flag&#xff0c;结果回显提示&#xff0c;需要获取管理员 可以尝试将名字改为admin 触发报错&#xff0c;说明可能存在其他的验证是否为管理员的方式 通过抓包后&#xff0c;在cookie字段发现了 特殊的东西…

嵌入式系统入门实战:探索基本概念和应用领域

嵌入式系统是一种专用的计算机系统,它是为了满足特定任务而设计的。这些系统通常具有较低的硬件资源(如处理器速度、内存容量和存储容量),但具有较高的可靠性和实时性。嵌入式系统广泛应用于各种领域,如家用电器、汽车、工业控制、医疗设备等。 嵌入式系统的基本概念 微控…

Springboot整合liquIbase组件

liquIbase方式 1、添加依赖 <!-- Liquibase 依赖 --> <dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId> </dependency>2、添加配置项 spring:# datasource 数据源配置内容&#xff0c;对应…

实战项目 在线学院springcloud调用篇3(nacos,feging,hystrix,gateway)

一 springcloud与springboot的关系 1.1 关系 1.2 版本关系 1.3 list转json串 public class Test {public static void main(String[] args) {List<String> dataListnew ArrayList<String>();dataList.add("12");dataList.add("45");dataLi…

java8的reduce方法

在 Java 8 中&#xff0c;reduce 是一个流操作方法&#xff0c;用于将流中的元素按照指定的操作进行归约&#xff08;reduce&#xff09;操作&#xff0c;最终得到一个结果。 reduce 方法有三种重载形式&#xff1a; T reduce(T identity, BinaryOperator<T> accumulato…

Debezium系列之:Debezium Server Offset编辑器

Debezium系列之:Debezium Server Offset编辑器 一、认识Offset编辑器二、Offset编辑器目录结构三、Offset编辑器系统环境要求四、pom.xml五、Main.java六、CommandLineInterface.java七、OffsetFileController.java八、OffsetEditorApp.java九、编译项目十、启动Offset编辑器一…

2023国赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…

深入剖析Kubernetes之控制器模式的实现-Deployment

文章目录 Deployment Deployment Deployment 实现了 Kubernetes 项目中一个非常重要的功能&#xff1a;Pod 的“水平扩展 / 收缩”&#xff08;horizontal scaling out/in&#xff09;。这个功能&#xff0c;是从 PaaS 时代开始&#xff0c;一个平台级项目就必须具备的编排能力…

oCPC实践录 | oCPC转化的设计、选择、归因与成本设置(1)

如前文所言&#xff0c;在CPC情况下&#xff0c;广告主根据经验通过选定媒体、关键词、人群定向等方法筛选流量&#xff0c;然后给出相对应的点击出价采买流量。在oCPC下&#xff0c;广告主通过转化目标和相对应的转化出价采买流量。 经常有人说相比CPC&#xff0c;在oCPC下&a…