nextjs-一个基于React的全栈框架

一、nextjs基本介绍

Next.js是一个基于React的轻量级框架,用于构建React应用程序。它在React的基础上提供了一些增强功能,包括服务器渲染(SSR)、静态生成(SSG)、路由等。Next.js的目标是简化React应用程序的开发流程,并提供更好的性能和开发体验。
官网地址:https://nextjs.org/

二、安装设置

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

npx create-next-app@latest
# or
yarn create next-app

如果你希望使用 TypeScript 开发项目,可以通过 --typescript 参数创建 TypeScript 项目:

npx create-next-app@latest --typescript
# or
yarn create next-app --typescript

安装完成后:

  • 运行 npm run dev 或 yarn dev 来启动开发服务器,访问地址为 http://localhost:3000。
  • 通过 http://localhost:3000 地址访问你的应用程序。
  • 编辑 pages/index.tsx 文件并在浏览器中查看更新。
    有关使用 create-next-app 的更多信息,请查看 create-next-app 文档。
    目录结构介绍:
  1. pages:这是 Next.js 最重要的目录之一。在 pages 目录下,你可以创建各种页面组件,每个页面组件对应一个路由。Next.js 使用文件系统路由,这意味着你可以在 pages 目录下创建一个文件,该文件的名称将成为对应页面的 URL 路径。例如,pages/index.js 对应根路径 /,pages/about.js 对应 /about。
  2. public:这是存放静态资源的目录。在 public 目录下的文件可以通过相对路径直接访问。例如,public/images/logo.png 可以通过 /images/logo.png 访问。
  3. components:这是存放可复用组件的目录。在 components 目录下,你可以创建各种可复用的 React 组件,然后在页面组件中引用它们。
  4. styles:这是存放样式文件的目录。你可以在 styles 目录下创建 CSS、Sass、Less 或 CSS-in-JS 等样式文件,并在页面组件中引入它们。
  5. api:这是存放 API 相关代码的目录。在 api 目录下,你可以创建处理 API 请求的文件,例如使用 Next.js 的 API 路由功能来处理后端请求。
    创建页面:
    Next.js是从服务器生成页面,再返回给前端展示。Next.js默认从 pages 目录下取页面进行渲染返回给前端展示,并默认取 pages/index.ts 作为项目的首页进行展示。
    在pages目录下,创建index.ts(项目首页)
import Image from 'next/image'
import { Inter } from 'next/font/google'const inter = Inter({ subsets: ['latin'] })export default function Home() {return (<mainclassName={flex min-h-screen flex-col items-center justify-between p-24 ${inter.className}}>nextjs项目</main>)
}

Next.js默认支持webpack的热部署功能,添加完index.ts后,可以看到 http://localhost:3000/ 页面内容自动更新了。

三、路由的使用

1、静态路由
静态路由是指在编译时就确定了路由的路径和对应的页面组件。你可以在 Next.js 的 pages 目录下创建一个文件,文件的路径就是路由的路径,文件的内容就是对应的页面组件。例如,创建一个名为 about.tsx 的文件,它的路径就是 /about,访问该路径时会渲染 about.tsx 文件中的页面组件。
pages目录下的.tsx文件都能被浏览器直接访问到:
在这里插入图片描述
http://localhost:3000
http://localhost:3000/about
2、动态路由
动态路由是指在运行时根据参数的不同来动态生成路由。你可以在 Next.js 的 pages 目录下创建一个带有参数的文件,文件名使用中括号 [] 包裹参数名。例如,创建一个名为 posts/[id].tsx 的文件,它的路径可以是 /posts/1、/posts/2 等,访问不同的路径时会根据参数的不同渲染对应的页面组件。你可以在页面组件中通过 useRouter 钩子来获取参数的值。
在这里插入图片描述

import { useRouter } from 'next/router'
export default function Home() {const router = useRouter()const id = router.query.idreturn (<div>postid{id}</div>)
}

相当于localhost:3000/posts/:id这个id可以动态改变,都可以访问到对应的文件。
3、Link路由跳转
Link 组件是 Next.js 提供的一个特殊组件,它可以帮助你在客户端进行无刷新的页面跳转,相当于传统H5里的a标签
如:完成动态路由的跳转

import Link from "next/link"
export default function Home () {return (<div><h1>link页面</h1><ul>{[1,2,3,4,5].map((item) => (<li key={item}><Link href={/posts/${item}}>跳转post页面 {item}</Link></li>))}</ul></div>)
}

4、Api路由
API 路由允许你在 Next.js 项目中创建自定义的服务器端逻辑,用于处理客户端发起的 HTTP 请求。
要创建一个 API 路由,你可以在 Next.js 项目的 pages/api 目录下创建一个文件,文件名即为路由的路径。例如,如果你想创建一个处理 /api/users 路径的接口,你可以在 pages/api 目录下创建一个名为 user.ts 的文件。

// Next.js API route support: https://nextjs.org/docs/api-routes/introductionimport type { NextApiRequest, NextApiResponse } from 'next'type Data = {code: numberusers: string[]
}export default function handler(req: NextApiRequest,res: NextApiResponse<Data>
) {const users: string[] = ['Alice', 'Bob', 'Charlie']res.status(200).json({code: 0,users,})
}

在这里插入图片描述
5、Api动态路由
动态路由允许你在 API 路由中使用参数,以便根据不同的请求动态生成响应。
下面是一个使用动态路由的示例:

  1. 在 pages/api 目录下创建一个名为 [id].js 的文件(或者 [id].ts,如果你使用 TypeScript)。
  2. 在该文件中,编写处理 API 请求的代码。你可以使用 req.query 对象来获取动态路由参数。下面是一个示例:
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next'type Data = {message: string
}export default function handler(req: NextApiRequest,res: NextApiResponse<Data>
) {const { id } = req.queryres.status(200).json({ message: Received request for ID: ${id} })
}

在上面的示例中,我们使用 req.query 对象来获取动态路由参数 id。然后,我们可以根据 id 处理请求,并返回相应的数据。启动 Next.js 项目,并访问 /api/123(其中 123 是动态路由参数)。你将看到返回的 JSON 数据中包含了动态路由参数的信息。

四、Restful API增删改查

在 pages/api 目录下创建一个名为products的文件,如下示列:
在这里插入图片描述

// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next'
import mock from './mock.json'const productsList = [...mock.products]type Data = {total: numberproducts: any[]
}export default function handler(req: NextApiRequest,res: NextApiResponse<Data>
) {console.log({method: req.method, query: req.query})console.log(req.body)switch(req.method) {case 'POST':productsList.push(req.body)break;case 'PUT':{const index = productsList.findIndex((item) => (item.id === req.body.id))if(index >= 0) productsList.splice(index, 1, req.body)}break;case 'DELETE':{const index = productsList.findIndex((item) => (item.id === req.body.id))if(index >= 0) productsList.splice(index, 1)}break;default:break;}res.status(200).json(({total: productsList.length,products: productsList}))
}

在vscode安装REST Client 插件,VS Code 的 REST Client 插件是一个非常有用的工具,它可以帮助你在编辑器中发送 HTTP 请求并查看响应结果。使用 REST Client 插件,你可以轻松地测试和调试 API 接口。
创建一个新的 .http 或 .rest 文件。这些文件将用于编写和发送 HTTP 请求。
在文件中编写你的请求。你可以使用类似于 cURL 的语法来描述请求,包括请求方法、URL、请求头、请求体等。下面是一个示例
在根目录下新建一个rest文件,用于测试接口
在这里插入图片描述

在这里插入图片描述

@host = localhost:3000
@route=api/products###
get http://{{host}}/{{route}}###
post http://{{host}}/{{route}}
Content-Type: application/json{"id": 1,"title": "Rest Client Demo"
}###
put http://{{host}}/{{route}}
Content-Type: application/json{"id": 11,"title": "Updated"
}###
delete http://{{host}}/{{route}}
Content-Type: application/json{"id": 11
}

使用 REST Client 插件发送请求。你可以在请求的行上按下 Ctrl + Alt + R(或者右键点击请求行并选择 “Send Request”)来发送请求。插件将会发送请求并在编辑器的右侧显示响应结果。
查看响应结果。REST Client 插件将会在编辑器的右侧显示响应结果,包括响应状态码、响应头和响应体等信息。

五、其他参考学习链接

https://mp.weixin.qq.com/s/J0yF-qynw9fTysrLzkqzQg
https://mp.weixin.qq.com/s/zKLN4tBJc5svYvxB1WkdLg
https://mp.weixin.qq.com/s/HLI4eQpV8IbA2Yt34vUv2Q
https://blog.csdn.net/woyebuzhidao321/article/details/124133583
https://www.jianshu.com/p/8b61ae94ac7f
https://youmoxiang.blog.csdn.net/article/details/129518797

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

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

相关文章

十八、字符串(1)

本章概要 字符串的不可变 的重载与 StringBuilder 意外递归字符串操作 字符串操作毫无疑问是计算机程序设计中最常见的行为之一。 在 Java 大展拳脚的 Web 系统中更是如此。在本章中&#xff0c;我们将深入学习在 Java 语言中应用最广泛的 String 类&#xff0c;并研究与之相关…

pymysql连接Mariadb/Mysql出现错误(配置正确情况下)解决办法

场景&#xff1a;在kali中使用python中pymysql对Mariadb进行连接&#xff0c;在整个过程中配置全部正确&#xff0c;但是就是无法进行连接&#xff0c;提示结果如下&#xff1a; Access denied for user rootlocalhost解决办法&#xff1a;进入数据库中&#xff0c;将默认密码…

实验室烧杯可以用超声波清洗机吗

实验室烧杯可以用超声波清洗机吗&#xff1f;答案是可以的&#xff01;超声波清洗机不仅可以清洗实验烧杯&#xff0c;还可以用于清洗实验室中的试管、培养皿、移液管、载玻片、容量瓶、锥形瓶等各类实验器皿。在实验中&#xff0c;如果烧杯清洁不到位&#xff0c;会使得实验数…

分布式存储 vs. 全闪集中式存储:金融数据仓库场景下的性能对比

作者&#xff1a;深耕行业的 SmartX 金融团队 张德敏 近年来随着金融行业的高速发展&#xff0c;经营决策者及监管机构对信息时效性的要求越来越高&#xff0c;科技部门面临诸多挑战。例如&#xff0c;不少金融机构使用数仓业务系统&#xff0c;为公司高层提供日常经营报表&am…

CSV文件新增数据知多少

CSV文件编辑数据时 一、如果数据的长度不超过11位&#xff0c;直接正常输入 二、如果数据的长度大于等于11位&#xff0c;新增数据时&#xff0c;将列格式改为文本&#xff0c;并且输入数字&#xff0c;数字使用文本格式保存 如果数字长度超过11位&#xff0c;则展示为E科学…

seq“ 和 “time“ 字段

在RTP&#xff08;Real-time Transport Protocol&#xff09;报文中&#xff0c;"seq" 和 "time" 字段分别表示以下内容&#xff1a; 1. **Seq&#xff08;Sequence Number&#xff09;字段**&#xff1a;Seq字段是RTP头部中的一个16位字段&#xff0c;用…

​iOS上架App Store的全攻略

第一步&#xff1a;申请开发者账号 在开始将应用上架到App Store之前&#xff0c;你需要申请一个开发者账号。 1.1 打开苹果开发者中心网站&#xff1a;Apple Developer 1.2 使用Apple ID和密码登录&#xff08;如果没有账号则需要注册&#xff09;&#xff0c;要确保使用与公…

瑞芯微RKNN开发·yolov5

官方预训练模型转换 下载yolov5-v6.0分支源码解压到本地&#xff0c;并配置基础运行环境。下载官方预训练模型 yolov5n.ptyolov5s.ptyolov5m.pt… 进入yolov5-6.0目录下&#xff0c;新建文件夹weights&#xff0c;并将步骤2中下载的权重文件放进去。修改models/yolo.py文件 …

提高编程效率-Vscode实用指南

您是否知道全球73%的开发人员依赖同一个代码编辑器&#xff1f; 是的&#xff0c;2023 年 Stack Overflow 开发者调查结果已出炉&#xff0c;Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE&#xff0c;与专业…

eBay类目限制要多久?eBay促销活动有哪些?-站斧浏览器

eBay类目限制要多久&#xff1f; 1、eBay对不同类目的商品有不同的限制和要求。一些类目可能对新卖家有一定的限制&#xff0c;限制他们在该类目下销售商品的数量或需要满足某些条件才能进行销售。 2、对于新卖家的限制通常是在一定时间内&#xff0c;比如30天或90天&#xf…

(转)STR 内核做了什么

参考这篇文章&#xff1a; Linux电源管理(6)_Generic PM之Suspend功能 写的很清晰

微信小程序一键获取位置

需求 有个表单需要一键获取对应位置 并显示出来效果如下&#xff1a; 点击一键获取获取对应位置 显示在 picker 默认选中 前端 代码如下: <view class"box_7 {{ showChange1? change-style: }}"><view class"box_11"><view class"…

Stable Diffusion WebUI报错RuntimeError: Torch is not able to use GPU解决办法

新手在安装玩Stable Diffusion WebUI之后会遇到各种问题&#xff0c; 接下来会慢慢和你讲解如何解决这些问题。 在我们打开Stable Diffusion WebUI时会报错如下&#xff1a; RuntimeError: Torch is not able to use GPU&#xff1b;add --skip-torch-cuda-test to COMMANDL…

SQL题目记录

1.商品推荐题目 1.思路&#xff1a; 通过取差集 得出要推荐的商品差集的选取&#xff1a;except直接取差集 或者a left join b on where b null 2.知识点 1.except selectfriendship_info.user1_id as user_id,sku_id fromfriendship_infojoin favor_info on friendship_in…

vue3脚手架搭建

一.安装 vue3.0 脚手架 如果之前安装了2.0的脚手架&#xff0c;要先卸载掉&#xff0c;输入&#xff1a; npm uninstall vue-cli -g 进行全局卸载 1.安装node.js&#xff08;npm&#xff09; node.js&#xff1a;简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是…

【C++笔记】模板进阶

【C笔记】模板进阶 一、非类型模板参数二、类模板的特化三、模板的分离编译 一、非类型模板参数 我们之前学过的模板虽然能很好地帮我们实现泛型编程&#xff0c;比如我们可以让一个栈存储int类型的数据&#xff0c;一个栈存储double类型的数据&#xff1a; template <cla…

【MultiOTP】在Linux上使用MultiOTP进行SSH登录

在前面的文章中【FreeRADIUS】使用FreeRADIUS进行SSH身份验证已经了解过如何通过Radius去来实现SSH和SUDO的登录&#xff0c;在接下来的文章中只是将密码从【LDAP PASSWORD Googlt OTP】改成了【MultiOTP】生成的passcode&#xff0c;不在需要密码&#xff0c;只需要OTP去登录…

大鼠药代动力学(PK参数/ADME)+毒性 实验结果分析

在真实做实验的时候&#xff0c;出现了下面真实测试的一些参数&#xff0c;一起学习一下&#xff1a; 大鼠药代动力学&#xff1a; 为了进一步了解化合物 96 的药代动力学性质&#xff0c;我们选择化合物 500 进行 SD大鼠药代动力学评估。 经静脉注射和口服给药后观察大鼠血药…

广东广西大量工地建筑支模

近年来&#xff0c;广东广西地区的建筑工地发展迅猛&#xff0c;为满足日益增长的建筑需求&#xff0c;大量工地都需要使用支模模板。支模模板是建筑施工中不可或缺的重要工具&#xff0c;用于搭建楼层、梁柱等结构的模板系统。在广东广西&#xff0c;有许多专业的支模模板厂家…

TCP/IP(二十一)TCP 实战抓包分析(五)TCP 第三次握手 ACK 丢包

一 实验三&#xff1a;TCP 第三次握手 ACK 丢包 第三次握手丢失了,会发生什么? 注意: ACK 报文是不会有重传的,当 ACK 丢失了,就由对方重传对应的报文 ① 实验环境 ② 模拟方式 1、 服务端配置防火墙iptables -t filter -I INPUT -s 172.25.2.157 -p tcp --tcp-flag ACK…