美文网首页
Vue 代码书写风格指南

Vue 代码书写风格指南

作者: HowieDev | 来源:发表于2019-02-27 15:12 被阅读0次

    查看 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

    <ul>

        <li

        v-for = "todo in todos"

        :key = "todo.id"

        >

            {{  todo.text }}

        </li>

    </ul>

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

    <ul v-if = "shouldShowUsers">

        <li

            v-for = "user in users"

            :key = "user.id"

        >

            {{ user.name }}

        </li>

    </ul>

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

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

    使用 ‘scoped’ 特性

    <template>

        <button class= "button button-colse" > buttonName </button>

    </template>

    // 使用 ‘scoped’ 特性

    <style scoped>

    .button {

        border: none;

        border-radius: 2px;

    }

    .button-close {

        background-color: red;

    }

    </style>

    // 使用 CSS Modules

    <template>

        <button :class= "[$style.button, $style.buttonClose]"> buttonName </button>

    </template>

    // 使用 CSS Modules

    <style module>

    .button {

        border: none;

        border-radius: 2px;

    }

    .buttonClose {

        background-color: red;

    }

    </style>

    // 使用 BEM 约定

    <template>

        <button class= "c-Button c-Button--close"> buttonName </button>

    </template>

    // 使用 BEM 约定

    <style>

    .c-Button {

        border: none;

        border-radius: 2px;

    }

    c-Button--close {

        background-color: red;

    }

    </style>

    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 中

    <MyComponent />

    // 在 DOM 模板中

    <my-component> </my-component>

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

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

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

    <MyComponent />

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

    <my-component> </my-component>

    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

    }

    <WelcomeMessage greeting-text="hi" />

    12、多个特性的元素

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

    <img

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

    alt = "Vue Logo"

    >

    <MyComponent

    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 里不用的那个)。

    <input type="text">

    <AppSidebar :style="{width: sidebarWidth + 'px' }" >

    16、指令缩写

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

    <input

        :value = "newTodoText"

        :placeholder="newTodoInstructions"

    >

    <input

        v-bind:value = "newTodoText"

        v-bind:placeholder="newTodoInstructions"

    >

    <input

        @input = "onInput"

        @focus ="onFocus"

    >

    <input

        v-on:input = "onInput"

        v-on:focus ="onFocus"

    >

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

    相关文章

      网友评论

          本文标题:Vue 代码书写风格指南

          本文链接:https://www.haomeiwen.com/subject/cpkfuqtx.html