vue 组件编码规范

一、为什么要有规范?
1. 自己、同事更容易阅读和理解
2. 更好的利用开发工具的功能(高亮、格式化等功能)
3. 更好的进行代码拆分
复制代码
二、 我们可以做什么?
1. 始终基于模块的方式来构建你的应用,每个模块专注于解决一个问题,做到独立、可复用、微小(不超过100行)、可测试。

2. 组件命名需要遵循以下规则:
    -组件名为多个有意义单词
    -简短(使用连字符分割单词)
    
3. 组件表达式简单化  
    (1)复杂表达式存在的问题
        -表达式功能强大但也存在风险
        -复杂的行内表达式阅读困难
        -行内表达式无法提取公用,导致重复编码
        -IDE无法识别且不能自动补全
    (2)如何避免
        -尽量使用method或者computed属性代替其功能
        
4. props尽量传递原始类型的数据
    -使用原始类型可以使得组件更接近于HTML5原生元素
    -其他开发人员可以更好地理解每一个prop的含义和作用
    -复杂的对象使得我们不能够清楚的知道哪些属性和方法被组件使用,使得代码难以重构和维护
    组件的每一个属性定义一个props,并且使用函数和原始类型的值
    ```
        <!-- 推荐 -->
        <range-slider
          :values="[10, 20]"
          :min="0"
          :max="100"
          :step="5"
          @on-slide="updateInputs"
          @on-end="updateResults">
        </range-slider>
        
        <!-- 避免 -->
        <range-slider :config="complexConfigObject"></range-slider>
    ```
    
5. 为每一个props提供验证
    (1)验证props可以保证你的组件可用性,即使使用者未按照你的想法使用也不会出现问题-----为什么
    (2)如何做
        -给prop提供默认值
        -使用type或者自定义validator验证传入的prop是否是你需要的如果不是会在控制台给使用者警告
        
6. 将this指向组件实例。切换不通上下文时确保this指向一个可用的component
    -尽量使用ES6进行编码(箭头函数保留this作用域)
    
7. 组件结构化(按照一定的结构组织使得组件易于理解可参考ELEMENTUI)
    -导出一个清晰有序的组件,使得代码阅读理解简单,有利于标准化
    -按照首字母排序 data、computed、watch、method、mounted,使得属性易于查找
    -使用单文件.vue格式组织代码
    ```
    <template lang="html">
      <div class="Ranger__Wrapper">
        <!-- ... -->
      </div>
    </template>
    
    <script type="text/javascript">
      export default {
        // 不要忘记了 name 属性
        name: 'RangeSlider',
        // 使用组件 mixins 共享通用功能
        mixins: [],
        // 组成新的组件
        extends: {},
        // 组件属性、变量
        props: {
          bar: {}, // 按字母顺序
          foo: {},
          fooBar: {},
        },
        // 变量
        data() {},
        computed: {},
        // 使用其它组件
        components: {},
        // 方法
        watch: {},
        methods: {},
        // 生命周期函数
        beforeCreate() {},
        mounted() {},
      };
    </script>
    
    <style scoped>
      .Ranger__Wrapper { /* ... */ }
    </style>
    ```
    
8. 合理的事件命名
    -以动词或名词结尾(如crive-upload-success、upload-error)
    
9. 避免使用this.$parent 尽量不在子组件访问父组件上下文
    -通过props传值给子组件
    -子组件触发事件通知父组件
    -通过props传递回调函数给子组件达到调用父组件方法的目的
    
10. 避免使用this.$ref VUE支持通过ref属性访问其他组件和HTML元素并能得到其相应的上下文
    违背了组件组件独立的原则
    当props和events难以实现功能时使用this.$ref或者需要操作DOM时而不是使用JQquery、document.getElement、docunment.queryElement

11. 使用组件名作为样式作用域命名空间
    -避免组件样式影响外部样式和被外部样式影响
    -模块名、目录名、样式作用域名一致易于开发者理解
    
12. 完善README.md文件方便其他开发者使用

13. 提供demo

14. 对组件文件进行代码校验

15. Mixins 封装可重用的代码,避免了重复。如果两个组件共享有相同的功能,则可以使用 mixin。通过 mixin,你可以专注于单个组件的任务和抽象的通用代码

参考 vue风格指南
复制代码

转载于:https://juejin.im/post/5cd53490f265da037d4fc7f4

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值