前端规范扩展

前端编程规范是基于原有vue2基础上那套《编码风格及标准》上,应用于vue3、typescript、vite2基础上延伸出来的扩展补充,持续完善

一、编码规范

ESLint 代码检测工具 + Pretter 代码格式化工具配合双校验代码

Git 规范

- 编码工具 vscode 同步参考文档中的 《编码风格及标准》进行配置,这里不再赘述;
- 相关配置已生成到业务项目中,开发无需过度关注和调试配置,有问题群里反馈交流同步解决;
- 使用 git cz 命令替代 git commit 命令,规范代码提交格式
$ npm install -g commitizen@4.2.4
- 使用 request merge 发起代码合并请求,统一项目代码管理者,代码管理者为代码质量负责
- 使用 git flow 命名规范 git 分支管理,Git主分支(保留分支):master、dev
  ● 功能(feature)分支
  ● 预发布(release)分支
  ● 修补bug(hotfix)分支

1:git主分支(master)。它是自动建立,用于发布重大版本更新
2:git开发主分支(dev)。日常开发在此分支上进行
3:git临时性分支:用于应对一些特定目的的版本开发(验证OK后,应该删除此分支),主要有

*** 功能(feature)分支:**
它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。可以采用feature-的形式命名;
*** 预发布(release)分支:
*
指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试;
预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release-的形式;
*** 修补bug(hotfix)分支:
*
软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补;
修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支,它的命名,可以采用hotfix-*的形式;

git cz 代码提交格式参考图
在这里插入图片描述
image.png
实图参考
image.png
提示注意,若不执行git cz 而是直接执行 git commit ,会跑检测代码格式的脚本lint-staaged,会对配置的 .jsx、.vue、.tsx、.ts语法格式和规范进行检查,若不符合规范,如
image.png
若解决完错误继续执行 commit ,将会提示提交格式不符合规范
image.png
so, git cz势在必行,那么 look, GAME OVER!
image.png

二、开发规范

es next语法

- 请各位务必使用esnext的语法进行项目开发,这一块通过后续 codeReview 及 GroupLeader merge管理

vue3

setup options 、.setup script、.jsx 三种模式应用场景
● 常规情况下推荐使用 setup script方式,尽量使用 template 构建视图,性能更好
● 常规无法满足情况下使用 jsx 更加灵活,可以使用 jsx 处理数据层
● 平台中.vue 组件封装,本着追溯性完整性,可以使用setup options,此方式仅限平台使用

1、全局组件管理
- src/compoents
: 全部以 C_开头,C_后首字母大写,示栗:C_Table

2、视图、路由、菜单三者命名一致
- src/views  src/router  /src/store/menu 
: views {fileName} = router {path}  = menu {index} 

3、js or css
- js 常规驼峰命名,见名知意 | css 常规 - 分割命名,层级递进,scss 中递进通过 &-引用
: getDataFn  |  form-item-input 

4UI组件API 提供的方法
- handler开头,驼峰命名 栗:handleChange ...

5、验证方法
- v_开头,栗: v_required

6、外部utils工具方法
- d_开头,栗:d_toUperCaseFirstLetter

... 更多命名代码介绍,絮絮叨叨后续逐步完善...

视图、路由、菜单三者命名一致参考图
image.png在这里插入图片描述
image.png

- <script setup> 为栗
1、name,请填写在 <script lang="ts" setup name="componentName" > 【views中必填跟参考一致】

2、props | defineProps | withDefaults(defineProps<>())
- props: Type as PropsType<type>
- defineProps: defineProps<Props>() 该 Props 在当前文件定义
- withDefaults: withDefaults(defineProps<Props>()) 该 Props 在当前文件定义 【推荐带默认】

3、emits | defineEmits
- ?差了啥 HH~
  
4、computed

5、methods 所有的方法
- 组件方法 > 自有方法 > async方法

6、watch
- beforeMount 的时候可以用来处理数据字典

7、onMounted
...
1、尽量使用 ref, 避免 reactive的坑,多个对象集中管理可以包裹在一个大的reactive,响应赋值一定要
- data.obb = res  // 注意,这里的data是一个大的 reactive 对象

2、template 或 jsx需要响应处理的数据,一定要用 reactive 或 ref 包括,推荐 ref
- ref 定义可以跟着自己的代码片段走,也可以包裹在一个 useEffect 中,script setup语法糖没这必要

3、v-model 会爆雷,需要使用历史值的时候,一个要保证响应式,一个要保证历史值是经过深拷贝的

4、尽量用 computed 去处理一些 if的表达式逻辑

5、如果同层级要监听多个watch,可以写在一起,如果监听的是一个嵌套对象或者深层次结构,一定接的增加
- {deep:true}

6、使用 vite2 配置alias,要同步在 tsconfig 中配置 path

7、特别注意,tsx 中使用 slots 的不同,参考 table 中的 demo

8、特别注意,tsx 中使用 jsx 语法替代 renderVNode,扩展性更强,同时也支持 render,建议tsx统一
- 涉及到 dom或vnode碎片的,都用 .tsx 来管理 data 数据,不涉及 .data.ts 即可

9、给子组件传递多属性的时候,除了特别定义的常用的 props 接入,其他 v-bind="$attrs" 接入即可

10、子组件需要修改父组件的值的时候
- emits 分发事件,若需要在分发的事件中需要父组件处理较多依赖逻辑,这样推荐
- v-mode:udated 方式,子组件需要父组件变更某些状态,子组件直接分发,父组件无需再@监听

11、data.ts 的数据若需要依赖的源组件上获取的异步数据来处理一些逻辑
- 将 data.ts 或 data.tsx 中的数据组成变成一个闭包函数,通过参数交互

12、data.ts 或 data.tsx 中若要把一些异步数据,通过 export 传递给 组件引用的 import 
- 需要通过 promise.resolve 或者 callback 回调的方式进行传递,推荐从源组件传递数据到 data 层

13、若 .tsx 方式编写的组件,将 defineComponent 中的 optiosn 剥离到 ./options.ts 文件中

14、异步和单向数据流的问题
- 异步的数据接收者,需要启用 watch 监听数据异步的变化,重新渲染,注意响应式搜嘎
- 单向数据流的问题,避免擅自修改父组件,导致多子医引父互相污染,这样的数据要双向 watch

15、关于注释,请同步我们的vscode配置,除了自动生成页头注释之外,主动添加编码注释

// --- 华丽丽瓜瓜线 ---
... 太多了,凑空让我慢慢完善吧 ... 培训就着代码实践分享吧, 包括一些封装思路等等...

更多的规则代码演示分享

typescript

不要把 typeScript 变成 anyScript,数据维护都应使用 tsc 约束

- interface 命名: export interface I_TableColumns {} 
: 除了defineProps中的interface之外,其他的都定义在 ./types.ts文件中
: defineProps 的 Props 剥离有坑,目前不支持,已提草案

- types 命名:export type T_HttpEvent<T> = {}

- 注意:在引用类型文件的时有,记得添加 type 标识
: import type {I_TableColumns} from './types'

后续持续完善…ing — 未完待续 ---- 后续会用 vitePress 或者 vuePress 来编写框架应用文档,将组件集打成lib发布到npm上统一管理,后续大家以 Submit contribution 的方式参与集成;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL夯实之路-查询性能优化深入浅出

MySQL调优分析 explain&#xff1b;show status查看服务器状态信息 优化 减少子任务&#xff0c;减少子任务执行次数&#xff0c;减少子任务执行时间&#xff08;优&#xff0c;少&#xff0c;快&#xff09; 查询优化分析方法 1&#xff0e;访问了太多的行和列&#xff1…

c语言三目运算符(条件运算符)

c语言三目运算符 c语言三木运算符 c语言三目运算符一、c语言三目运算符&#xff08;条件运算符&#xff09;格式二、c语言三目运算符&#xff08;条件运算符&#xff09;嵌套三目运算符 一、c语言三目运算符&#xff08;条件运算符&#xff09;格式 三目运算符格式&#xff1a;…

NAND新一代接口Separate Command Address (SCA) 简介

通过NAND Flash总线传输的信号分为三种类型&#xff1a;命令&#xff08;Commands&#xff09;、地址&#xff08;Addresses&#xff09;和数据&#xff08;Data&#xff09;。这些信号利用DQ[7:0]时间分时复用技术&#xff0c;在不同的时间段分别进行传输。其中&#xff0c;数…

使用Pygame库创建了一个窗口,并在窗口中加载了一个名为“ball.png“的图片,通过不断改变物体的位置,实现了一个简单的动画效果

import pygame import sys# 初始化Pygame pygame.init()# 创建窗口 screen pygame.display.set_mode((640, 480))# 加载图片 image pygame.image.load("ball.png")# 将物体初始位置设为屏幕左上角 x 0 y 0# 游戏循环 while True:# 处理事件for event in pygame.e…

四川古力未来科技有限公司:抖音小店的崛起之路

随着互联网的飞速发展&#xff0c;电子商务已经成为人们日常生活中不可或缺的一部分。作为一家以科技为核心的公司&#xff0c;四川古力未来科技有限公司在电子商务领域中崭露头角&#xff0c;特别是其抖音小店的发展引人注目。 四川古力未来科技有限公司的抖音小店自开业以来&…

redis(14):缓存雪崩、击穿、穿透及其处理方式

1 Redis 缓存过程 通常后端会采用Mysql等磁盘数据库,可以持久化但是访问慢,高并发时性能差,需要设置Nosql内存型数据库缓存:Redis等; Redis 数据库运行在内存中,因此他的查询速度比 MySql 快的多。所以我们会把一些用户经常查询的数据放在 Redis 中,当 Redis 有的时候…

word写标书的疑难杂症总结

最近在解决方案工作&#xff0c;与office工具经常打交道&#xff0c;各种问题&#xff0c;在此最下记录&#xff1a; 1.word中文档距离文档顶端有距离调整不了 1.疑难杂症问题1&#xff0c;多个空格都是不能解决 #解决办法&#xff1a;word中--布局-下拉框---“版式”--“垂直…

ArrayList源码阅读

文章目录 简介例子继承结构概览代码分析成员变量方法迭代器子列表 总结参考链接 本人的源码阅读主要聚焦于类的使用场景&#xff0c;一般只在java层面进行分析&#xff0c;没有深入到一些native方法的实现。并且由于知识储备不完整&#xff0c;很可能出现疏漏甚至是谬误&#x…

[机缘参悟-125] :实修 - “心性、自性”与“知识、技能”的区别,学习、修、悟的区别?

目录 一、“知识、技能” 1.1 什么是知识技能 1.2 知识、技能的位置 1.3 知识、技能的学习方法 二、"明心见性" 2.1 什么是"明心见性" 2.2 "明心见性"解读 2.2.1 何其自性&#xff0c;本自清净&#xff1b; 2.2.2 何其自性&#xff0c;…

将.NET应用转换成Window服务

写在前面 本文介绍了将.NET8.0应用程序转换成Windows服务。 需要在NuGet中获取并安装&#xff1a;Microsoft.Extensions.Hosting.WindowsServices 包 代码实现 using System.Runtime.InteropServices; using WorkerService1;public class Program {public static void Main…

【机器学习300问】6、什么是机器学习中的特征量?

一、首先我们看三个例子 例一&#xff1a;在辨别水果的任务中&#xff0c;人类一般会通过外观、味道、颜色等方面信息来进行区分。而机器学习则通过水果的颜色、重量、气味成分的量等被称之为“特征量”的数值来区分。 例二&#xff1a;在手写数字识别任务中&#xff0c;人类…

【Golang】二进制字符串转换为数字

在本文中&#xff0c;我们将探讨如何使用 Go 语言将十六进制字符串转换为二进制字符串&#xff0c;将不定长整型补码字符串转换为数字&#xff0c;以及如何将 IEEE754 标准的单精度&#xff08;32位&#xff09;和双精度&#xff08;64位&#xff09;浮点数字符串转换为数字。最…

LaTeX中的框以及框中的子图

目录 文章目录 目录框&#xff08;盒子&#xff09;\fboxframed包framed环境leftbar环境 mdframed包fcolorbox命令tcolorbox包adjustbox包调整盒子的宽度和高度旋转盒子 框中的子图问题一&#xff1a;框中插入图片问题二&#xff1a;给框中图片加上图名、编号caption包 问题三&…

动态规划学习笔记

背景 一般形式是求最值&#xff0c;核心是穷举。 首先&#xff0c;虽然动态规划的核心思想就是穷举求最值&#xff0c;但是问题可以千变万化&#xff0c;穷举所有可行解其实并不是一件容易的事&#xff0c;需要你熟练掌握递归思维&#xff0c;只有列出正确的「状态转移方程」…

【Python】新鲜出炉的海洋捕食者算法Python版本

2020年发表的海洋捕食者算法《Marine Predators Algorithm: A nature-inspired metaheuristic》。 作者只在原论文中给出了MATLAB代码&#xff0c;网上也没有Python版本&#xff0c;我自己用Python重写了MATLAB代码。 """2020海洋捕食者算法 """…

【自控实验】4. 数字仿真实验

本科课程实验报告&#xff0c;有太多公式和图片了&#xff0c;干脆直接转成图片了 仅分享和记录&#xff0c;不保证全对 使用matlab中的simulink进行仿真 实验内容 线性连续控制系统的数字仿真 根据开环传递函数G(S)的不同&#xff0c;完成两个线性连续控制系统的仿真。 …

C#上位机与欧姆龙PLC的通信12----【再爆肝】上位机应用开发(WPF版)

1、先上图 继上节完成winform版的应用后&#xff0c;今天再爆肝wpf版的&#xff0c;看看看。 可以看到&#xff0c;wpf的确实还是漂亮很多&#xff0c;现在人都喜欢漂亮的&#xff0c;颜值高的&#xff0c;现在是看脸时代&#xff0c;作为软件来说&#xff0c;是交给用户使用的…

【目标检测】YOLOv5算法实现(七):模型训练

本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github&#xff0c;删减了源码中部分内容&#xff0c;满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现&#xff0c;后续修改、增加相关模…

vue3hooks的使用

在 Vue 3 中&#xff0c;hooks 是用于封装组件逻辑的方法&#xff0c;类似于 Vue 2 中的 mixins。 使用 Hooks 可以提高代码的可维护性、可读性、可复用性和可测试性&#xff0c;降低代码之间的耦合度&#xff0c;使得组件的状态更加可控和可预测。 要使用 hooks&#xff0c;…