由于自己是半道出家(java转的),所以对于前端代码的一些规范不是很了解,都是看别人的代码是怎样就比葫芦画瓢的写了,也不知道为什么...今天偶尔刷到了原来Vue官方提供了一些编码规则的... 那下面就让我们看看我们编写的代码有多少没有按照规范来: 原文地址
使用vue中的良好编程习惯:
-
必要的:
这些规则会帮你规避错误,所以学习并接受他们带来的全部代价吧
-
强烈推荐
这些规则能够在绝大多数工程中改善可读性和开发体验
-
推荐
当存在多个同样好的选项,选任意一个都可以确保一致性
-
谨慎使用
有些vue特性的存在是为了照顾极端情况或者帮助老代码的平稳迁移,不能够被过度使用
-
组件名为多个单词---
必要 -
组件的
data必须为一个函数---必要当
data是一个对象的时候,它会在这个组件的所有实例之间共享 -
组件中的
prop定义应该尽量详细,至少需要定义其类型---必要细致的
prop定义有两个好处:- 它们写明了组件的API,所以很容易看懂组件的用法
- 在开发环境下,如果向一个组件提供格式不正确的prop,Vue会报警告,以帮助你捕获潜在的错误来源
-
为
v-for设置键值---必要不然在数组变动更新DOM的时候Vue将会优化渲染吧可能的DOM变更降到最低
-
避免
v-if和v-for用在一起---必要v-for比v-if具有更高的优先级,所以我们可以将数据先进行筛选再渲染 -
为组件样式设置作用域---
必要- scoped
- CSS Modules
- BEM
-
私有
property名---必要Vue使用
_前缀来定义自身的私有property,所以使用相同的前缀有覆写实例property的风险 -
组件文件---
强烈推荐 -
单文件组件文件的大小写---
强烈推荐文件名最好始终是单词大写开头,因为对于代码编辑器的自动补全最为友好
-
基础组件名---
强烈推荐这些组件只包括
HTM元素、其他基础组件、第三方UI组件库这样做的好处是:
- 同样性质的组件会排列在一起方便识别
- 避免在包裹简单组件时随意选择前缀
- 可以放在全局文件夹下,然后使用webpack等工具统一导入
-
单例组件名---
强烈推荐在某一页面只使用一次的组件,而且不接受
prop,应该以The前缀命名 -
紧密耦合的组件名---
强烈推荐和父组件紧密耦合的组件应该以父组件名作为前缀
-
组件中的单词顺序---
强烈推荐组件名应该以高级别的单词开头,以描述性的修饰词结尾
例如
SearchButtonClear.vue SettingsCheckboxLaunchOnStartup.vue -
自闭合组件---
强烈推荐在单文件组件、字符串模板和JSX中没有内容的组件应该是自闭合的
在DOM模板里要写全
-
模板中的组件名的大小写---
强烈推荐在单文件组件中使用
PascalCase,在DOM模板中使用kebab-case -
JS/JSX中的组件名大小写---
强烈推荐组件名应始终是
PascalCase -
完整单词的组件名---
强烈推荐 -
Prop名大小写---强烈推荐在
JavaScript中更自然的是camelCase,在HTML中更自然的是kebab-case -
多个
attribute的元素:分行写 -
模板中简单的表达式---
强烈推荐组件模板中只包含简单的表达式,复杂的表达式应该重构为计算属性或者方法
-
简单的计算属性---
强烈推荐将复杂的计算属性分割为尽可能多的更简单的计算属性
-
带引号的
attribute值---强烈推荐非空的
HTML attribute值应该始终带引号,例如<AppSidebar :style="{ width: sidebarWidth + 'px' }"> -
指令缩写---
强烈推荐 -
组件/实例的选项的顺序---
推荐- el
- name\parent
- functional
- delimiters\comments
- components\directives\filters
- extends\mixins
- inheriAttrs\model\props(propsData)
- data\computed
- watch\生命周期钩子
- methods
- template(render)\renderError
-
元素
attribute的顺序---推荐- is
- v-for
- v-if\v-else-if\v-else\v-show\v-cloak
- v-pre\v-once
- id
- ref\key
- v-model
- v-on
- v-html\v-text
-
组件/实例选项中的空行---
推荐 -
单文件组件的顶级元素的顺序---
推荐 -
没有在
v-if/v-else-if/v-else中使用key---谨慎使用如果元素类型相同,最好使用key
-
scoped中的元素选择器---谨慎使用元素选择器应避免出现在
scoped里(速度慢) -
隐性的父子组件通信---
谨慎使用优先使用
prop和事件进行父子间通信,而不是this.$parent或者变更prop -
非
flux的全局状态管理---谨慎使用应优先通过
Vuex管理全局状态,而不是通过this.$root或者一个全局事件总线
这下终于解开了我许久的疑惑了,哈哈哈哈 以后的编码要按照规范来了,这样对大家都好~~~