Vue精简版风格概述

Vue官网的风格指南按照优先级(依次为必要、强烈推荐、推荐、谨慎使用)分类,且代码间隔较大,不易查询。本文按照类型分类,并对部分示例或解释进行缩减,是Vue风格指南的精简版

组件名称

【组件名为多个单词】(必要)

组件名应该始终是多个单词的,根组件 App 除外。 这样做可以避免跟现有的以及未来的 HTML 元素相冲突,因为所有的 HTML 元素名称都是单个单词的

//bad Vue.component('todo', {})
//good Vue.component('todo-item', {})

【单文件组件文件名应该要么始终是单词大写开头 (PascalCase),要么始终横线连接 (kebab-case)】(强烈推荐)

//bad mycomponent.vue //good MyComponent.vue //good my-component.vue

【基础组件名要有一个特定前缀开头】(强烈推荐)

应用特定样式和约定的基础组件 (也就是展示类的、无逻辑的或无状态的组件) 应该全部以一个特定的前缀开头,比如 Base、App 或 V

//bad components/ |- MyButton.vue |- VueTable.vue |- Icon.vue //good components/ |- BaseButton.vue |- BaseTable.vue |- BaseIcon.vue

【只应该拥有单个活跃实例的组件应该以 The 前缀命名,以示其唯一性】(强烈推荐)

这不意味着组件只可用于一个单页面,而是每个页面只使用一次,这些组件永远不接受任何 prop

//bad components/ |- Heading.vue |- MySidebar.vue //good components/ |- TheHeading.vue |- TheSidebar.vue

【和父组件紧密耦合的子组件应该以父组件名作为前缀命名】(强烈推荐)

//bad components/ |- TodoList.vue |- TodoItem.vue |- TodoButton.vue //good components/ |- SearchSidebar.vue |- SearchSidebarNavigation.vue

【组件名应该以高级别的 (通常是一般化描述的) 单词开头,以描述性的修饰词结尾】(强烈推荐)

//bad components/ |- ClearSearchButton.vue |- ExcludeFromSearchInput.vue |- LaunchOnStartupCheckbox.vue |- RunSearchButton.vue |- SearchInput.vue |- TermsCheckbox.vue //good components/ |- SearchButtonClear.vue |- SearchButtonRun.vue |- SearchInputQuery.vue |- SearchInputExcludeGlob.vue |- SettingsCheckboxTerms.vue |- SettingsCheckboxLaunchOnStartup.vue

【单文件组件和字符串模板中组件名应总是PascalCase——但在DOM模板中总是kebab-case】(强烈推荐)

//bad <!-- 在单文件组件和字符串模板中 --> <mycomponent/> <myComponent/> <!-- 在 DOM 模板中 --> <MyComponent></MyComponent> //good <!-- 在单文件组件和字符串模板中 --> <MyComponent/> <!-- 在 DOM 模板中 --> <my-component></my-component>

【组件名应该倾向于完整单词而不是缩写】(强烈推荐)

//bad components/ |- SdSettings.vue |- UProfOpts.vue //good components/ |- StudentDashboardSettings.vue |- UserProfileOptions.vue

组件相关

【单文件组件、字符串模板和JSX中没有内容的组件应该自闭合——但在DOM模板里不要这样做】(强烈推荐)

自闭合组件表示它们不仅没有内容,而且刻意没有内容

//bad <!-- 在单文件组件、字符串模板和 JSX 中 --> <MyComponent></MyComponent> <!-- 在 DOM 模板中 --> <my-component/> //good <!-- 在单文件组件、字符串模板和 JSX 中 --> <MyComponent/> <!-- 在 DOM 模板中 --> <my-component></my-component>

【为组件样式设置作用域】(必要)

这条规则只和单文件组件有关。不一定要使用 scoped 特性。设置作用域也可以通过 CSS Modules,或者使用其它的库或约定

//bad <template><button>X</button></template> <style> .btn-close {background-color: red;} </style> //good <template><button>X</button></template> <style scoped> .btn-close {background-color: red;} </style> //good <template><button :class="[$style.button, $style.buttonClose]">X</button></template> <style module> .btn-close {background-color: red;} </style>

【单文件组件应该总是让 <script>、<template> 和 <style> 标签的顺序保持一致】(推荐)

//good <!-- ComponentA.vue --> <script>/* ... */</script> <template>...</template> <style>/* ... */</style> <!-- ComponentB.vue --> <script>/* ... */</script> <template>...</template> <style>/* ... */</style>

【一个文件中只有一个组件】(强烈推荐)

//bad Vue.component('TodoList', {}) Vue.component('TodoItem', {}) //good components/ |- TodoList.vue |- TodoItem.vue

【组件选项默认顺序】(推荐)

1、副作用 (触发组件外的影响)

el

2、全局感知 (要求组件以外的知识)

name parent

3、组件类型 (更改组件的类型)

functional

4、模板修改器 (改变模板的编译方式)

delimiters comments

5、模板依赖 (模板内使用的资源)

components directives filters

6、组合 (向选项里合并属性)

extends mixins

7、接口 (组件的接口)

inheritAttrs model props/propsData

8、本地状态 (本地的响应式属性)

data computed

9、事件 (通过响应式事件触发的回调)

watch
生命周期钩子 (按照它们被调用的顺序)

10、非响应式的属性 (不依赖响应系统的实例属性)

methods

11、渲染 (组件输出的声明式描述)

template/render renderError

prop

【Prop 定义应该尽量详细】(必要)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ppfzp.html