通用规范[react.js]
基本原则:结构、样式、行为分离
尽量确保jsx文件只有结构及行为逻辑,样式都放到 css 样式文件里。
文件/资源命名
在项目中,使用完整单词组合命名文件,可以提高可读性。例如:SalesReasult.jsx。
省略外链资源 URL 协议部分
引入资源使用相对路径,不要指定资源所带的具体协议— http:,https(除非这两者协议都不可用),使 URL 成为相对地址,避免Mixed Content 问题。
减少标签数量
任何时候都要用尽量小的复杂度和尽量少的标签来解决问题。有时,需要通过迭代和重构来使HTML变得更少。
写注释
- As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性、可读性。
- As long as necessary(如有必要,尽量详尽):复杂/重要逻辑书写合理详尽的注释。
命名
项目命名,全部采用小写方式, 以下划线分隔。(电销:client_new)
目录命名,全部采用小写方式, 以下划线分隔。有复数结构时,要采用复数命名法。(components)
jsx文件命名、组件命名, 帕斯卡命名法。(SalesProcess.jsx)
Less 文件命名,全部采用小写方式, 以下划线分隔。(index.less)
变量, 使用驼峰命名:
- 私有属性、变量和方法以下划线 _ 开头。
let _privateVari = 2; - 常量, 使用全部字母大写。
let PI = 3.1415926; - boolean 类型的变量使用 is 或 has 开头。
let isXingYun = false; let hasApplyId = true;
Type
常量用const声明,变量用let,避免用var声明变量带来变量提升问题。
二元和三元操作符
操作符始终写在前一行, 以免分号的隐式插入产生预想不到的问题。
let x = a ? b : c;
let y = a ?
longButSimpleOperandB : longButSimpleOperandC;
let z = a ?
moreComplicatedB :
moreComplicatedC;
let x = foo.bar().
doSomething().
doSomethingElse();
三元操作符 ( ? : )替代逻辑不复杂 if 条件判断语句
二元操作符 ( && 和 ||)替代逻辑不复杂 if 条件判断语句。
利用二元布尔操作符短路性质, 只有在必要时才会计算到最后一项。
不要扩充内置原型
函数长度
1.建议一个函数的长度控制在 50 行以内。低耦合,高内聚原则。 将过多的逻辑单元混在一个大函数中,易导致难以维护。一个清晰易懂的函数应该完成单一的逻辑单元。复杂的操作应进一步抽取,通过函数的调用来体现流程。 特定算法等不可分割的逻辑允许例外。 2.不要在循环内部声明函数; 3.不要在同个作用域下声明同名变量;
组件开发规范
每个组件单独存放到一个文件里面。
提炼出公共的组件单独存放,避免重复冗余代码。
避免修改外部传入的对象。
单一原则,一个组件只做一件事。
组件的样式尽可能使用相对单位定义。
例如通过对外部font-size的设置,达到对组件整体缩放的效果;提炼出公共的颜色设置,达到对全局的颜色统一设置。
弹出类内容(如下拉框、Tips等)要考虑是否会溢出祖先容器造成出现滚动条或者被截断问题。
组件更新必须符合向下兼容。
样式规范
Less 和 Sass
命名,less中的变量、函数以中划线分隔命名
Less,每个模块应该有一个单独的less, 然后每个最外层的父类 className 应该写在第一位,所有子Node的样式都写在里面,这样是为了避免命名冲突。
属性声明顺序:(减少浏览器reflow(回流),提升浏览器渲染dom的性能)
1.定位属性:position display float left top right bottom overflow clear z-index
2.自身属性:width height padding border margin background
3.文字样式:font-family font-size font-style font-weight font-varient color
4.文本属性text-align vertical-align text-wrap text-transform text-indent text-decoration letter-spacing word-spacing white-space text-overflow
操作符 为了提高可读性,在圆括号中的数学计算表达式的数值、变量和操作符之间均添加一个空格。
margin: 10px 0 (@variable * 2) 10px
嵌套 避免不必要的嵌套。因为虽然可以使用嵌套,但是并不意味着应该使用嵌套。只有在必须将样式限制在父元素内(也就是后代选择器),并且存在多个需要嵌套的元素时才使用嵌套。
LESS嵌套最多不能超过5层,CSS选择器不要超过3层。
代码组织 代码按一下顺序组织:
- @import
- 变量声明
- 样式声明 模块化 每个模块必须是一个独立的样式文件,文件名与模块名一致; 模块样式的选择器必须以模块名开头以作范围约定;
选择器任何超过3级的选择器,需要思考是否必要,是否有无歧义的,能唯一命中的更简短的写法。
- 避免使用通用选择器
- 避免使用标签或 class 选择器限制 id 选择器
- 避免使用标签限制 class 选择器
- 避免使用多层标签选择器,使用 class 选择器替换,减少css查找
- 避免使用子选择器
/* Not recommended */
treehead treerow treecell {…}
/* Recommended */
treehead > treerow > treecell {…}
/* Much to recommended */
.treecell-header {…}
清除浮动,建议当元素需要撑起高度以包含内部的浮动元素时,通过对伪类设置 clear 或触发 BFC 的方式进行 clearfix。尽量不使用增加空标签的方式。 !important ,除公共样式之外,在业务代码中尽量不能使用 !important