zoukankan      html  css  js  c++  java
  • 前端代码规范

    通用

    • 缩进两个空格
    • 等号两边留有空格
    • 文件名为  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

  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/it-Ren/p/14265085.html
Copyright © 2011-2022 走看看