前端代码规范

通用

  • 缩进两个空格
  • 等号两边留有空格
  • 文件名为  my-component
  • 组件名

React

  • 文件名:帕斯卡命名 MyComponents
  • ESlint  
    <Foo
      superLongParam="bar"
      anotherSuperLongParam="baz"
    />
    <Foo bar="bar" />  // 能放一行的放一行
    // 多行属性采用缩进
    <Foo
      superLongParam="bar"
      anotherSuperLongParam="baz"
    >
      <Quux />
    </Foo>
    //JSX的属性都采用双引号,其他的JS都使用单引号:jsx-quotes。
    // bad
    <Foo bar='bar' />
    
    // good
    <Foo bar="bar" />
    
    // bad
    <Foo style={{ left: "20px" }} />
    
    // good
    <Foo style={{ left: '20px' }} />
    //始终在自闭和标签前添加一个空格
    <Foo />
    //属性名称始终使用驼峰命名法。
    // bad
    <Foo
      UserName="hello"
      phone_number={12345678}
    />
    
    // good
    <Foo
      userName="hello"
      phoneNumber={12345678}
    />
    //当属性值等于true的时候,省略该属性的赋值
    // good
    <Foo
      hidden
    />
    //在 render 方法中事件的回调函数,应该在构造函数中进行bind绑定。 eslint: react/jsx-no-bind。
    //为什么这样做? 在 render 方法中的 bind 调用每次调用 render 的时候都会创建一个全新的函数。
    // bad
    class extends React.Component {
      onClickDiv() {
        // do stuff
      }
    
      render() {
        return <div onClick={this.onClickDiv.bind(this)} />
      }
    }
    
    // good
    class extends React.Component {
      constructor(props) {
        super(props);
    
        this.onClickDiv = this.onClickDiv.bind(this);
      }
    
      onClickDiv() {
        // do stuff
      }
    
      render() {
        return <div onClick={this.onClickDiv} />
      }
    //怎么定义propTypes, defaultProps, contextTypes等
    import React, { PropTypes } from 'react';
    
    const propTypes = {
      id: PropTypes.number.isRequired,
      url: PropTypes.string.isRequired,
      text: PropTypes.string,
    };
    
    const defaultProps = {
      text: 'Hello World',
    };
    
    class Link extends React.Component {
      static methodsAreOk() {
        return true;
      }
    
      render() {
        return <a href={this.props.url} data-id={this.props.id}>{this.props.text}</a>
      }
    }
    
    Link.propTypes = propTypes;
    Link.defaultProps = defaultProps;
    
    export default Link;

Vue

一、Vie编码基础

程序员写好看的代码,不亚于写一行好看的字
好看的代码总是让人心旷神怡,
不好,不规范的代码,让人看了想说mmp,
那我们就来学习一下规范的代码怎么写的吧

以下来自B站的学习视频:前端必备-阿里大厂前端开发规范!

vue项目规范以 Vue 官方规范(https://cn.vuejs.org/v2/style-guide/)中的A规范为基础

(一) 组件规范

1、组件名为多个单词

组件名应该始终是多个单词的,且命名规范为 KebabCase格式

这样做可以避免跟现有的以及未来的 HTML 元素相冲突,因为所有的 HTML 元素名称都是单个单词的。

正例:

export default {
name: 'TodoItem',
    ...}

反例:

export default {
  name: 'Todo',
  // ...}Vue.component('todo', {
  // ...})

2、组件名称为 pascal-case 格式

正例:

my-component.vue

反例:

myComponent.vue

3、为基础文件名为 base开头,使用完整单词

正例:

base-button.vue

反例:

MyButton.vue

4、和父组件紧密契合的子组件以父组件名为前缀名

父组件:todo-list.vue

正例:

todo-list-item.vue
todo-list-button.vue

反例:

todoItem.vue



5、在 template 模板中使用组件,应使用 PascalCase 模式,并且使用自闭合组件

正例:

<!-- 在单文件组件和字符串模板中 --><MyComponent/>
    <!-- 在 DOM 模板中 或者 在所有地方 --><my-component></my-component>

反例:

<!-- 在单文件组件和字符串模板中 --><myComponent/>

6、组件的 data 必须是一个函数。

正例:

// In a .vue fileexport default {
  data () {
    return {
      foo: 'bar'
    }
  }}

反例:

export default {
  data: {
    foo: 'bar'
  }}

7、Props定义应该尽量详细

  • 命名:使用cameCase驼峰命名

  • 必须指定类型

  • 必须加上注释,表明其含义

  • 必须加上require或者 default,两者二选一

  • 如果业务需要,必须加上 validator验证

正例:

props: {
// 组件状态,用于控制组件的颜色
    status: {
type: String,
        required: true,
        validator: function (value) {
return {
'succ',
                'info',
                'error'
            }.indexOf(value) !== -1
        }
    }
}

8、为组件样式设置作用域

写CSS样式时,加上 作用域 scope

正例:

<stype scoped>
    .btn-close {
font-size: 16px;
    }
</style>

9、如果特性元素过多,应主动换行

正例:

<MyConponent foo="a" bar="b"
             baz="z" />

(二) 模板中使用简单的表达式

组件模板中应该只包含简单的表达式,如果有复杂的表达式,应该使用计算属性或法

正例:

<!-- 在模板中 -->
{{ normalizedFullName }}
// 复杂表达式已经移入一个计算属性
computed: {
  normalizedFullName: function () {
    return this.fullName.split(' ').map(function (word) {
      return word[0].toUpperCase() + word.slice(1)
    }).join(' ')
  }
}

(三) 指令使用缩写形式

指令缩写 (用 : 表示 v-bind: 、用 @ 表示 v-on: 和用 # 表示 v-slot:) 应该要么都用要么都不用。

(四) 标签顺序保持一致

<template>...</template>
<script> ... </script>
<style> ... </style>

(五) script标签内部解构顺序

components --> props --> data --> computed --> watch --> filter --> 钩子函数 --> methods

 

posted @ 2021-01-12 00:14  一路向北√  阅读(160)  评论(0编辑  收藏  举报

web应用开发&研究 -

业精于勤而荒于嬉。

工作,使我快乐。


Font Awesome | Respond.js | Bootstrap中文网