当前位置: 首页 > news >正文

【Next】3. 开发规范

笔记来源:编程导航

1、约定式路由

Next.js 使用 约定式路由,根据文件夹的结构和名称,自动将对应的 URL 地址映射到页面文件。

常见的几种路由规则如下:

1)基础规则:以 app 目录作为根路径,根据文件夹的名称和嵌套层级,自动映射为 URL 地址。注意,只有目录下直接包含 page 文件(js、jsx、ts、tsx 都支持),才会被识别为路由。

在这里插入图片描述
2)路由组:可以通过 (xxx) 语法,创建一个路由组,不会被转化为路径,可用于对路由进行分组管理,比如同组路由使用同一套布局。

在这里插入图片描述
3)动态路由:可以通过 [xxx] 语法,让多个不同参数的 URL 复用同一个页面,比如 app/question/[questionId]/page.tsx 中 questionId 就是动态路由参数,可以匹配 /question/1/question/2 等 URL 地址,在页面中可以获取到 questionId 并加载不同的题目。

export default function Page({ params }: { params: { questionId: string } }) {return <div>我的题目: {params.questionId}</div>
}

以上只是 Next.js 的几种常用路由规则,还有其他的规则,详情可以见 Next.js 的官方文档:https://nextjs.org/docs/app/building-your-application/routing

2、静态资源

Next.js 约定在 /public 目录下存放静态资源。在其中新建 assets 目录,可以在里面存放图片等静态资源文件,比如网站的 Logo。1615897920391872514_0.02139650278099836

对应官方文档:https://nextjs.org/docs/app/building-your-application/optimizing/static-assets

然后就可以用 Next.js 的 Image 组件加载静态资源,比如:

<Image src={`/assets/logo.png`} alt={alt} width="64" height="64" />

Next.js 会针对该组件进行特定的图像优化,提升性能。

注意,某些特殊的、常用的元信息文件不是放在 public 目录下,而是应该根据特定规则放在 app 目录下!

对应官方文档:https://nextjs.org/docs/app/api-reference/file-conventions/metadata

比如将 favicon.ico 放到 app 的根目录下,可展示站点小图标。将 robots.txt 放到 app 的根目录下,可用于告诉搜索引擎爬虫能否访问特定的页面、以及站点地图的地址,比如:

User-Agent: *
Allow: /
Disallow: /private/Sitemap: https://mianshiya.com/sitemap.xml

3、文件组织形式

首先,项目中的每个页面和组件都是单独的文件夹。

基于 Next.js 的约定式路由,我们每个页面目录内需要添加 page.tsx 页面文件和 index.css 样式文件;每个组件目录内添加 index.tsx 页面文件和 index.css 样式文件。对于非页面文件,可以使用 index.tsx 替代 page.tsx。而且 index.css 也可以使用 index.module.css 的 css 模块化来替代。

对于项目中多页面公用的组件,放在 src/components 目录下;对于某个页面私有的组件,放在该页面的 components 目录下。

4、页面开发规范

Next.js 支持 React 的语法,可以用函数的方式声明页面和组件。每个页面的根元素必须有 id、每个组件根元素必须有 className,用于控制样式和快速定位。

为了区分服务端和客户端渲染,每个页面(或组件)都必须在开头显示编写 “use client” 或 “use server”

默认为服务端,需要使用客户端需要在开头指定,当然,内部不单单是使用客户端那么简单,而是进行一种混合操作。

5、其他注意事项

1)开发时要严格注意 TypeScript 的类型和编辑器的错误提示,并且定期打包构建。因为 Next.js 的构建要求非常严格,稍有不慎就会报错。构建报错的话,注意查看和处理构建中的报错信息。

2)在项目中慎用 window 等浏览器环境才支持的对象,服务端无法使用。注意保证客户端渲染页面和服务端渲染页面的一致性,否则会出现水合错误。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 哪个编程工具让你的工作效率翻倍?
  • zhidianyun01/基于 ThinkPHP+Mysql 灵活用工+灵活用工源码+灵活用工平台源码
  • 怎样通过c51实现环境监测设计
  • shell脚本—————局域网IP扫描
  • vscode常用插件及设置
  • 在繁忙工作环境中提升开发效率:JetBrains IntelliJ IDEA 的应用
  • Java异常处理-如何选择异常类型
  • 【软件测试】需求之外的“意外”:如何处理范围外的问题?
  • Hive的存储格式
  • csrf的详解
  • ContentObserver 内容观察者
  • Comsol 水下周期弹性结构中的声传播损失
  • 类在JVM中的工作原理
  • Renesa Version Board和微信小程序通信
  • ubuntu设置为自己需要的屏幕分辨率
  • 【5+】跨webview多页面 触发事件(二)
  • 【css3】浏览器内核及其兼容性
  • chrome扩展demo1-小时钟
  • CSS3 变换
  • Git同步原始仓库到Fork仓库中
  • HTTP--网络协议分层,http历史(二)
  • JWT究竟是什么呢?
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Python学习之路13-记分
  • Python中eval与exec的使用及区别
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 入口文件开始,分析Vue源码实现
  • 思考 CSS 架构
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # 达梦数据库知识点
  • #565. 查找之大编号
  • (1) caustics\
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (一)插入排序
  • (转)iOS字体
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .dwp和.webpart的区别
  • .env.development、.env.production、.env.staging
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 5种线程安全集合
  • .net FrameWork简介,数组,枚举
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @TableLogic注解说明,以及对增删改查的影响
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [20190113]四校联考
  • [ActionScript][AS3]小小笔记
  • [Algorithm][动态规划][子序列问题][最长递增子序列][摆动序列]详细讲解