Vue 代码书写风格指南

查看 Vue官方 风格指南,记录下我的学习笔记。

优先级 A 的规则: 必要的(规避错误)


1、组件名为多个单词,根组件‘App’除外

Vue.component( 'todo-item',  { 

    // ..... 

})

export default {

    name: 'todoItem',

    // ......

}

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

export default {

    data () {

        return {

            foo: 'bar',

            // .......

            }

        }

}

// 在一个Vue 的根实例上直接使用对象是可以的,因为只存在一个这样的实例

new Vue ({

    data: {

        foo:  'bar'

    }

})

3、Prop 定义应该尽量详细

props: {

    status: String

}

4、为 v-for 设置键值 ,总是用 key 配合 v-for

       

        v-for = "todo in todos"

        :key = "todo.id"

        >

            {{  todo.text }}

       

5、避免 v-if 和 v-for 用在同一个元素上

       

            v-for = "user in users"

            :key = "user.id"

        >

            {{ user.name }}

       

6、为组件设置作用域 ,添加组件专属前缀

不管怎样,对于组件库,我们应该更倾向于选用基于 class 的 (BEM) 策略而不是 scoped 特性。

使用 ‘scoped’ 特性

// 使用 ‘scoped’ 特性

// 使用 CSS Modules

// 使用 CSS Modules

// 使用 BEM 约定

// 使用 BEM 约定

7、私有属性名

在插件、混入等扩展中始终为自定义的私有属性所用 $_ 前缀,并附带一个命名空间以回避和其他作者的冲突(比如 $_yourPluginName_)

var myGreatMixin = {

    // ... ...

    methods: {

        $_myGreatMixin_update: function () {

        // ... ...

        }

    }

}

优先级B的规则: 强烈推荐 (增强可读性)


1、组件文件 (拆分功能,放到统一功能目录下)

只有有能够拼接文件的构建系统,就把每个组件单独分成文件

components/

|- TodoList.js

|- TodoItem.js

components/

|- TodoList.vue

|- TodoItem.vue

2、单文件组件文件的大小写(统一文件名的命名规范)

单文件组件的文件名 要么使用单词大写开头(PascalCase)

components/

|- MyComponent.vue

要么使用横线连接(kebab-case)

components/

|- my-component.vue

3、基础组件名

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

// Base 前缀开头

components/

|- BaseButton.vue

|- BaseTable.vue

|- BaseIcon.vue

// App 前缀开头

components/

|- AppButton.vue

|- AppTable.vue

|- AppIcon.vue

// V 前缀开头

components/

|- VButton.vue

|- VTable.vue

|- VIcon.vue

4、单利组件名

只应该拥有单个活跃实例的组件应该以 The 前缀命名,以示其唯一性

这不意味着组件只可用于一个单页面,而是每个页面只使用一次。这些组件永远不接受任何 prop,因为它们是为你的应用定制的,而不是它们在你的应用中的上下文。如果你发现有必要添加 prop,那就表明这实际上是一个可复用的组件。

components/

|- TheHeading.vue

|- TheSidebar.vue

5、紧密耦合的组件名

和父组件紧密耦合的子组件应该以父组件名作为前缀命名。

components/

|- TodoList.vue

|- TodoListItem.vue

|- TodoListItemButton.vue

components/

|- SearchSidebar.vue

|- SearchSidebarNavigation.vue

6、组件名中的单词顺序

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

components/

|- SearchButtonClear.vue

|- SearchButtonRun.vue

|- SearchInputQuery.vue

|- SearchInputExcludeGlob.vue

|- SettingsCheckboxTerms.vue

|- SettingsCheckboxLaunchOnStartup.vue

7、自闭合组件

在单文件组件、字符串模板和JSX中没有内容的组件应该是自闭合的--但在DOM模板里永远不要这么做。

HTML 并不支持自闭合的自定义元素——只有官方的“空”元素。所以上述策略仅适用于进入 DOM 之前 Vue 的模板编译器能够触达的地方,然后再产出符合 DOM 规范的 HTML。

// 在单文件组件、字符串模板和 JSX 中

// 在 DOM 模板中

8、模板中组件名的大小写

对于绝大多数项目来说,在单文件组件和字符串模板中组件名应该总是 PascalCase 的——但是在 DOM 模板中总是 kebab-case 的。

// 在单文件组件和字符串模板中

// 在 DOM 模板中 或者在所有地方

9、JS/JSX 中的组件名大小写

Vue.component ('MyComponent', {

    // ...

})

import MyComponent from './MyComponent.vue'

export dafault {

    name: 'MyComponent',

    // ...

}

10、 完整单词的组件名 (不建议使用缩写)

components/

|- StudentDashboardSettings.vue

|- UserProfileOptions.vue

11、Prop 名大小写 (驼峰命名)

props: {

    greetingText: String

}

12、多个特性的元素

多个特性的元素应该分多行撰写,每个特性一行

src = "https://vuejs.org/images/logo.png"

alt = "Vue Logo"

>

foo="a"

bar="b"

baz="c"

/>

13、模板中简单的表达式

组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法

// 在模板中

{{ normalizedFullName }}

// 复杂表达式已经移入一个计算属性

computed: {

    normalizedFullName: function () {

        return this.fullName.split('').map(funcation (word) {

            return word[0].toUpperCase() + word.slice(1)

        }).join('')

    }

}

14、简单的计算属性

更简单、命名得当的计算属性遵循的原则是:

    易于测试

    易于阅读

    更好的“拥抱变化”

computed: {

    basePrice: function () {

        return this.manufactureCost / (1 - this.profitMargin)

    },

    discount: function () {

        return this.basePrice * (this.discountPercent || 0)

    },

    finalPrice: function () {

        return this.basePrice - this.discount

    }

}

15、带引号的特性值

非空 HTML 特性值应该始终带引号 (单引号或双引号,选你 JS 里不用的那个)。

16、指令缩写

(用 : 表示 v-bind:和 用 @ 表示 v-on:)用法应该统一

    :value = "newTodoText"

    :placeholder="newTodoInstructions"

>

    v-bind:value = "newTodoText"

    v-bind:placeholder="newTodoInstructions"

>

    @input = "onInput"

    @focus ="onFocus"

>

    v-on:input = "onInput"

    v-on:focus ="onFocus"

>

剩余两项代码书写规则,大家可以查阅Vue官网。

你可能感兴趣的:(Vue 代码书写风格指南)