React全站框架Next.js使用入门

news2024/11/16 10:46:28

Next.js是一个基于React的服务器端渲染框架,它可以帮助我们快速构建React应用程序,并具有以下优势:

1. 支持服务器端渲染,提高页面渲染速度和SEO;
2. 自带webpack开发环境,实现即插即用的特性;
3. 支持静态网站生成(SSG)和增量静态网站生成(ISR),提高网站性能。

先看看原网站吧,Next.js - React 应用开发框架 | Next.js中文网

Next.js by Vercel - The React Framework

1. 安装Node.js和npm

还是建议英文官网吧,信息可能更新更及时一些,官网建议node.js版本在18.17以上

 这个就不说了吧,建议使用nvm作为node的多版本管理器,这样开发不同app的时候可以解决node版本不同问题。

nvm安装配置:GitHub - nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

windows版: GitHub - coreybutler/nvm-windows: A node.js version management utility for Windows. Ironically written in Go.

安装的时候记得注意看杀毒软件拦截情况,并予以许可,建议让nvm管理自己已经安装过的版本,这样后期切换不会有障碍,如果切换版本有问题建议删除后重新配置。

####查看系统已安装版本
node --version

###如果不行,直接安装最新版吧
nvm install node

###当然还可以安装指定版本
nvm install 18.17

###要查看可用版本
nvm list available

##查看已安装版本
nvm list installed

 

直接使用命令切换版本

### 直接使用最新版本
nvm use latest

### 使用指定版本
nvm use 16.13.2

2. 创建一个新的Next.js项目

官方建议直接使用create-next-app创建项目,最简单快捷。

可以使用以下命令在终端中创建一个新的Next.js项目:


npx create-next-app my-app

还有手动安装,喜欢折腾的来吧:

##创建文件夹并进入开发文件夹
mkdir my-app
cd my-app

## 安装必要的组件
npm install next@latest react@latest react-dom@latest

 修改package.json

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  }
}

3. 运行开发服务器

进入my-app目录,启动框架开发;

在项目根目录下,可以使用以下命令启动开发服务器:

#启动开发
npm run dev

 不出以外的话这个界面就出来了,http://localhost:3000/

4. 熟悉next框架目录结构

Next.js框架目录结构的详细介绍:

  1. pages目录:这个目录用于存放所有的页面组件。Next.js框架将会根据pages中的组件自动生成路由,例如pages/about.js对应的路由为/about。

  2. public目录:这个目录用于存放静态文件,例如图片、字体等等。这些文件可以在组件中使用。

  3. components目录:这个目录用于存放各种可复用组件,例如按钮、表格等等。

  4. utils目录:这个目录用于存放通用的工具函数和常量,例如通用的API请求函数、常量定义等等。

  5. styles目录:这个目录用于存放全局的样式文件。在Next.js中,可以使用CSS模块化来避免样式泄漏的问题。

  6. pages/api目录:这个目录用于存放API相关的组件,例如处理表单数据等等。这些组件可以在客户端和服务端同时使用。

  7. .next目录:这个目录是Next.js框架编译后生成的目录,存放编译后的代码和一些临时文件。

  8. package.json文件:这个文件用于管理项目的依赖和脚本。在Next.js中,一些内置的脚本例如dev、build、start可以用于开发、构建和启动项目。

  9. 启用src目录后,aap目录会放入src下

使用 src 目录和不使用 src 目录的区别在于文件的组织方式。在使用 src 目录时,开发者将所有源代码放置在 src 目录中,而不是将源代码和其他文件混合在一个顶级目录中。

使用 src 目录的好处包括:

  • 更干净和组织良好的文件结构
  • 更容易区分哪些文件是源代码,哪些是其他文件
  • 更容易在构建过程中忽略其他文件,只编译源代码

但是,使用 src 目录也会增加一定的复杂性,因为需要在配置文件中指定源码的路径。如果项目较小,不使用 src 目录也可以,但是在大型项目中,使用 src 目录可能会更好地组织和管理代码。

默认大家都喜欢这个默认目录了,不过因为一般app都要分页,共用很多其他组件,如样式文件,页面独有组件,redux等,所以后面会调整目录,将单个的页面文件修改为文件夹,默认页面以index.js为入口,页面独有css文件以style为名等。详细见后面步骤

5. 习惯整合styled-components(不喜欢的可以掠过)

Next.js和styled-components可以很容易地集成在一起。下面是详细的配置方法和代码。

1. 安装依赖:

npm install styled-components babel-plugin-styled-components

2. 在`.babelrc`中添加`styled-components`插件:

{
  "presets": ["next/babel"],
  "plugins": [["styled-components", { "ssr": true }]]
}

这将启用服务器端渲染并使用`styled-components`。

3. 创建`_document.js`文件,这是一个Next.js的特殊文件,用于自定义html的渲染。

// _document.js  创建这个后next.js会先以这个_document.js为入口
import Document, { Html, Head, Main, NextScript } from 'next/document';
import { ServerStyleSheet } from 'styled-components';

class MyDocument extends Document {
  static async getInitialProps(ctx) {
    const sheet = new ServerStyleSheet();
    const originalRenderPage = ctx.renderPage;

    try {
      ctx.renderPage = () =>
        originalRenderPage({
          enhanceApp: (App) => (props) =>
            sheet.collectStyles(<App {...props} />),
        });

      const initialProps = await Document.getInitialProps(ctx);

      return {
        ...initialProps,
        styles: (
          <>
            {initialProps.styles}
            {sheet.getStyleElement()}
          </>
        ),
      };
    } finally {
      sheet.seal();
    }
  }

  render() {
    return (
      <Html>
        <Head />
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;

这个文件用于收集所有的server-side渲染的样式,并将它们注入到html中。

4. 创建一个样式组件:

// Button.js   不过建议加上style做标记
import styled from 'styled-components';

const Button = styled.button`
  background-color: #4caf50;
  color: white;
  font-size: 20px;
  padding: 10px 20px;
  border: none;
  border-radius: 5px;

  &:hover {
    background-color: #3e8e41;
  }
`;

export default Button;

在上述代码中,我们创建了一个名为`Button`的styled-components组件。它将应用一些基本的CSS样式,并在鼠标悬停时变色。

5. 在组件中使用样式组件:

//  home.js
import Button from './Button';

const Home = () => {
  return (
    <div>
      <h1>My App</h1>
      <Button>Click me</Button>
    </div>
  );
};

export default Home;

在这里,我们将`Button`组件添加到我们的`Home`组件中。

现在,我们已经成功地使用`styled-components`在Next.js中创建了一个样式组件。

6、创建React组件

在`/pages`目录下创建一个`.js`文件,即可创建一个页面。例如,可以在`/pages/index.js`中创建一个简单的React组件:


function Home() {
  return (
    <div>
      <h1>Welcome to Next.js!</h1>
    </div>
  )
}

export default Home

7. 目录结构调整

个人习惯改一下原来的目录结构,在src根目录下建立pages(需要再tailwind.config.js里面加入页面资源路径),然后建立components文件夹放一些通用组件,config文件夹放网站常用设置配置,lang配置网站语言信息,redux文件夹专门放redux相关的拆分文件和文件夹,utils放置常用函数等,大家根据自己喜好调整即可。

调整后需要注意调整后各模块的引入路径,基于tailwind.config.js,next.config.js等常用配置来配置参数和路径

这样在浏览器中访问http://localhost:3000,即可查看网站。现在,你可以开始编辑你的React组件和其他文件。不熟悉的人建议一步一步调整,这样可以看到哪里调整了会出错。

以上内容是Next.js的基础入门步骤,你可以学习更多高级的特性和API来构建更具体的应用。

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

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

相关文章

新华三数字大赛复赛知识点 网络访问控制

EAD解决方案、portal认证、以太网访问控制列表 EAD&#xff1a; 网络安全从本质上讲是管理问题&#xff0c;&#xff08;End user Admission Domination&#xff09;解决方案从控制用户终端安全接入网络的角度入手&#xff0c;整合网络接入控制与终端安全产品&#xff0c;通过…

nginx对多个服务器的高可用,容易出现鉴权失败

高可用简单测试正常&#xff0c;但是出现高概率401鉴权错误 抓包发现&#xff0c;确实是401 &#xff0c; 而鉴权是两次交互&#xff1a; 抓包发现鉴权到不同服务器上了&#xff0c;导致鉴权没有完成。 此时就需要我们的ip_hash,把同一IP地址的请求,都分配给同一台后端服务器&…

【mysql】基于binlog数据恢复指令和坑

文章目录 1.binlog相关配置是否开启binlogbinlog日志格式 2.导出binlog日志mysqlbinlog指令updateinsertdeletebinlog中的事件 3.数据恢复4.特别注意的坑为什么bash脚本执行mysqlbinlog&#xff0c;无法找到指令为什么执行mysqlbinlog&#xff0c;无法数据恢复 1.binlog相关配置…

互联网Java工程师面试题·Spring Boot篇·第一弹

目录 1、什么是 Spring Boot&#xff1f; 2、Spring Boot 有哪些优点&#xff1f; 3、什么是 JavaConfig&#xff1f; 4、如何重新加载 Spring Boot 上的更改&#xff0c;而无需重新启动服务器&#xff1f; 5、Spring Boot 中的监视器是什么&#xff1f; 6、如何在 Sprin…

stm32一种步进电机查表法驱动

文章目录 一、定时器基础频率二、驱动原理三、关键代码 对于stm32芯片来说&#xff0c;步进电机的驱动由于要在中断中不断计算下一次脉冲的时间而极其消耗算力&#xff0c;使用计算的方法对于芯片的算法消耗更高&#xff0c;特别是在f1这种算力比较低的芯片上&#xff0c;这时候…

【数电笔记】25-mos管的开关特性

目录 说明&#xff1a; mos管的符号 1. N沟道增强型 2. P沟道增强型 3. N沟道耗尽型 4. P沟道耗尽型 mos管的静态开关特性 1. N沟道增强型MOS管 2. P沟道增强型MOS管 说明&#xff1a; 笔记配套视频来源&#xff1a;B站&#xff1b;本系列笔记并未记录所有章节&#…

(C语言)判定一个字符串是否是另一个字符串的子串,若是则返回子串在主串中的位置。

要求&#xff1a; &#xff08;1&#xff09;在主函数中输入两个字符串&#xff0c;调用子函数cmpsubstr()判断&#xff0c;并在主函数输出结果。 &#xff08;2&#xff09;子函数的返回值为-1表示未找到&#xff0c;否则返回子串的位置&#xff08;起始下标&#xff09;。 …

883重要知识点

&#xff08;1&#xff09;程序结构分三种&#xff1a;顺序结构&#xff0c;选择结构&#xff0c;循环结构。 &#xff08;2&#xff09;该程序都要从main&#xff08;&#xff09;开始&#xff0c;然后从最上面往下。 &#xff08;3&#xff09;计算机的数据在电脑中保存以二…

微信小程序uni.chooseImage()无效解决方案

Bug场景&#xff1a; 微信小程序在上传图片时可以通过 uni.chooseImage()方案进行上传&#xff0c;这里不再赘述具体参数。一直项目都可以正常使用&#xff0c;突然有一天发现无法使用该方法&#xff0c;于是查了一下&#xff0c;发现是用户隐私协议问题。故记录一下解决方案。…

11、pytest断言预期异常

官方用例 # content of test_exception_zero.py import pytestdef test_zero_division():with pytest.raises(ZeroDivisionError):1/0# content of test_exception_runtimeerror.py import pytestdef test_recursion_depth():with pytest.raises(RuntimeError) as excinfo:def…

STM32上模拟CH340芯片的功能 (一)

#虚拟串口模拟CH340# 后续代码更新放gitee 上 一、思路 1. 确定通信接口&#xff1a;CH340是一款USB转串口芯片&#xff0c;因此您需要选择STM32上的某个USB接口来实现USB通信。通常情况下&#xff0c;STM32系列芯片都有内置的USB接口&#xff0c;您可以根据您的具体型号选择…

Excel 实现在某一列中循环合并多行单元格

在 Excel 中&#xff0c;使用 VBA&#xff08;Visual Basic for Applications&#xff09;宏可以轻松实现多行合并单元格的操作。下面是一个简单的 VBA 代码实现循环合并3行单元格的示例&#xff1a; 1. 打开 Excel 在你的 Excel 文件中&#xff0c;按下 Alt F11 打开 VBA 编…

Raspberry Pi 2, 2 of n - Pi 作为 IoT 消息代理

目录 介绍 环境 先决条件 - 设置静态 IP 地址 安装 Mosquitto 启动/停止 Mosquitto 配置先决条件 - 安装 mqtt_spy 配置 Mosquitto 配置 Mosquitto - 无安全性 测试 Mosquitto 配置 - 无安全性 配置 Mosquitto - 使用密码身份验证 Mosquitto 测试 - 带密码验证 概括 介绍 在本文…

创建conan包-Understanding Packaging

创建conan包-Understanding Packaging 1 Understanding Packaging1.1 Creating and Testing Packages Manually1.2 Package Creation Process 本文是基于对conan官方文档Understanding Packaging翻译而来&#xff0c; 更详细的信息可以去查阅conan官方文档。 1 Understanding …

1. 了解继承的概念,掌握派生类的定义。2. 掌握派生类构造方法的执行过程。3. 掌握方法的重载与覆盖。4. 掌握抽象类的概念及上转型对象的使用

1、定义一个抽象类Shape&#xff0c;类中封装属性name指定图形名称&#xff0c;定义用于求面积的抽象方法。定义3个子类&#xff1a;圆形类Circle、梯形类Trapezoid和三角形类Triangle&#xff0c;都继承Shape类&#xff0c;子类中各自新增属性&#xff0c;定义构造方法、设置属…

中缀表达式转后缀表达式(详解)

**中缀表达式转后缀表达式的一般步骤如下&#xff1a; 1&#xff1a;创建一个空的栈和一个空的输出列表。 2&#xff1a;从左到右扫描中缀表达式的每个字符。 3&#xff1a;如果当前字符是操作数&#xff0c;则直接将其加入到输出列表中。 4&#xff1a;如果当前字符是运算符&a…

PyQt实战 创建一个PyQt5项目

前后端分离 参考链接 PyQt5实战&#xff08;二&#xff09;&#xff1a;创建一个PyQt5项目_pyqt5实战项目_笨鸟未必先飞的博客-CSDN博客 项目目录 创建一个QT项目 调用pyuic工具将dialog.ui文件编译为Python程序文件ui_dialog.py。 # -*- coding: utf-8 -*-# Form implemen…

【专题】【中值定理-还原大法】

1&#xff09;构造辅助函数 2&#xff09;罗尔定理&#xff1a; 闭区间连续&#xff0c;开区间可导 F&#xff08;a&#xff09;F&#xff08;b&#xff09; 3&#xff09;F‘&#xff08;ξ&#xff09;0&#xff0c;原命题得证 极限保号性&#xff1a;

Selenium启动Chrome插件(Chrome Extensions)

Selenium启动Chrome插件(Chrome Extensions) 需求描述&#xff1a; 在使用WebDriver启动Chrome浏览器时式启动一个默认设置(比较干净)的浏览器&#xff0c;但是我在自动化测试的过程中需要用到插件。 实现方法&#xff1a; 其一&#xff1a;启动浏览器的同时直接取安装包.cr…

3.5毫米音频连接器接线方式

3.5毫米音频连接器接线方式 耳机插头麦克风插头 绘制电路图注意事项 3.5毫米音频连接器分为单声道开关型和无开关型如下图&#xff1a; sleeve&#xff08;套筒&#xff09; tip&#xff08;尖端&#xff09; ring&#xff08;环&#xff09; 耳机插头 麦克风插头 绘制电路图…