前端开发规范

2020-08-27  本文已影响0人  9d072aea39ea

通用规范

命名

目录及文件命名

变量命名

// 不推荐
var getTitle = "LoginTable"

// 推荐
let tableTitle = "LoginTable"

函数命名

动词 含义 返回值
can 判断是否可执行某个动作 (权 ) 函数返回一个布尔值。true:可执行;false:不可执行
has 判断是否含有某个值 函数返回一个布尔值。true:含有此值;false:不含有此值
is 判断是否为某个值 函数返回一个布尔值。true:为某个值;false:不为某个值
get 获取某个值 函数返回一个非布尔值
set 设置某个值 无返回值、返回是否设置成功或者返回链式对象
//是否可阅读
function canRead(){
    return true;
}

//获取姓名
function getName{
    return this.name
}

注释

单行注释

  1. 单独一行://(双斜线)与注释文字之间保留一个空格
  2. 在代码后面添加注释://(双斜线)与代码之间保留一个空格,并且//(双斜线)与注释文字之间保留一个空格。
  3. 注释代码://(双斜线)与代码之间保留一个空格。
// 调用了一个函数 <= 1)单独在一行
setTitle();
 
var maxCount = 10; // 设置最大量 <= 2)在代码后面注释
 
// setName(); // <= 3)注释代码

多行注释

/*
* 代码执行到这里后会调用setTitle()函数
* setTitle():设置title的值
*/
setTitle();

需要注释的地方

  1. 公共组件使用说明
  2. 各组件中重要函数或者类说明
  3. 复杂的业务逻辑处理说明
  4. 特殊情况的代码处理说明,对于代码中特殊用途的变量、存在临界值、函数中使用的hack、使用了某种算法或思路等需要进行注释描述
  5. 多重 if 判断语句

HTML规范

CSS规范

/* 不推荐 */
.xiangqing { sRules; }
.news_list { sRules; }
.zhuti { sRules; }

/* 推荐 */
.detail { sRules; }
.news-list { sRules; }
.topic { sRules; }
/* 不推荐 */
padding-bottom: 0px;
margin: 0em;

/* 推荐 */
padding-bottom: 0;
margin: 0;
/* 不推荐 */
.content .title {
  font-size: 2rem;
}

/* 推荐 */
.content > .title {
  font-size: 2rem;
}
/* 不推荐 */
padding-bottom: 2em;
padding-left: 1em;
padding-right: 1em;
padding-top: 0;

/* 推荐 */
padding: 0 1em 2em;

JS规范

缩进

使用 tab 缩进(2 个空格)

注释原则

命名

let loadingModules = {};
let isReady = false;
let hasMoreCommands = false;

分号

统一要加分号

空格

以下几种情况不用写空格:

以下几种情况一定要写空格:

这些后续会用 eslint 和 prettier 进行格式化

// 不推荐
var a = {
  b : 1
};

// 推荐
var a = {
  b: 1
};

// 不推荐
++x;
y++;
z = x ? 1:2;

// 推荐
++x;
y++;
z = x ? 1 : 2;

// 不推荐
var a = [ 1, 2 ];

// 推荐
var a = [1, 2];

// 推荐
var doSomething = function(a, b, c) {
  // do something
};

// 推荐
doSomething(item);

// 不推荐
for (let i = 0;i < 6;i++) {
  x++;
}

// 推荐
for (let i = 0; i < 6; i++) {
  x++;
}

空行

以下几种情况一定要有空行

换行

换行的地方,行末必须有','或者运算符;
以下几种情况不需要换行:

以下几种情况需要换行:

// 不推荐
var a = {
    b: 1
    , c: 2
};

x = y
    ? 1 : 2;

// 推荐
var a = {
    b: 1,
    c: 2
};

x = y ? 1 : 2;

// 推荐
if (condition) {
    ...
} else {
    ...
}

try {
    ...
} catch (e) {
    ...
} finally {
    ...
}

// 不推荐
function test()
{
    ...
}

// 推荐
function test() {
    ...
}

// 不推荐
var a, foo = 7, b,
    c, bar = 8;

// 推荐
var a,
    foo = 7,
    b, c, bar = 8;

引号

最外层统一使用单引号,除非字符串嵌套的情况

// 不推荐
var x = "test";

// 推荐
var y = 'foo',
  z = '<div id="test"></div>';

对象,数组

// 推荐
var a = {
  b: 1,
  c: 2
};

括号

下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally, with

// 不推荐
if (condition) doSomething();

// 推荐
if (condition) {
  doSomething();
}

undefined

// 不推荐
if (person === undefined) {
    ...
}

// 推荐
if (typeof person === 'undefined') {
    ...
}

三元操作符

let x = a ? b : c;
let y = a ?
    longButSimpleOperandB : longButSimpleOperandC;
let z = a ?
        moreComplicatedB :
        moreComplicatedC;
// 不推荐
if (val != 0) {
  return foo();
} else {
  return bar();
}

// 推荐
return val ? foo() : bar();

异步

其他

React

基础规则

React 中的命名

// 组件名称
MyComponent
// 属性名称
onClick
// 样式属性
backgroundColor

JSX 写法

// 推荐
<Component />

// 不推荐
<Component></Component>
// 推荐
<Component
  bar="bar"
  baz="baz" 
/>

// 不推荐
<Component
  bar="bar"
  baz="baz" />
// 推荐
<Foo />

//不推荐 
<Foo/>

<Foo                 />

<Foo
 />
// 推荐
render() {
    return (
      <MyComponent className="long body" foo="bar">
        <MyChild />
      </MyComponent>
    );
  }
  
  // 不推荐
  render() {
    return <MyComponent className="long body" foo="bar">
             <MyChild />
           </MyComponent>;
  }

key 属性设置

避免使用index作为key使用

为组件绑定事件处理器

// 推荐
 handleClick = () => {
    console.log('this is:', this);
 }
 <button onClick={this.handleClick}> Click me </button>
  
  // 不推荐
   constructor(props) {
    super(props);
    this.handleClick = this.handleClick.bind(this);
 }
 handleClick(){
    console.log('this is:', this);
 }
 <button onClick={this.handleClick}> Click me </button>

State

避免不必要 render 的写法

路由加载

建议使用路由懒加载当前用户所需要的内容,这样能够显著地提高你的应用性能。尽管并没有减少应用整体的代码体积,但你可以避免加载用户永远不需要的代码,并在初始加载的时候减少所需加载的代码量。
使用React.lazy()或者第三方插件Loadable

上一篇 下一篇

猜你喜欢

热点阅读