欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端開發(fā)必備小技巧之前端代碼規(guī)范Vue篇

 更新時(shí)間:2025年01月21日 09:09:22   作者:前端初見  
這篇文章主要介紹了前端代碼規(guī)范的重要性以及Vue項(xiàng)目的編碼規(guī)范,包括組件規(guī)范、模板規(guī)范、指令規(guī)范、標(biāo)簽順序規(guī)范、必須為v-for設(shè)置鍵值、v-show與v-if選擇、script標(biāo)簽內(nèi)部結(jié)構(gòu)順序、VueRouter規(guī)范等具體內(nèi)容,需要的朋友可以參考下

前端代碼規(guī)范

規(guī)范的目的是為了編寫高質(zhì)量的代碼,讓你的團(tuán)隊(duì)成員每天得心情都是愉悅的,大家在一起是快樂的。

引自《阿里規(guī)約》的開頭片段:

…現(xiàn)代軟件架構(gòu)的復(fù)雜性需要協(xié)同開發(fā)完成,如何高效地協(xié)同呢?無(wú)規(guī)矩不成方圓,無(wú)規(guī)范難以協(xié)同,比如,制訂交通法規(guī)表面上是要限制行車權(quán),實(shí)際上是保障公眾的人身安全,試想如果沒有限速,沒有紅綠燈,誰(shuí)還敢上路行駛。對(duì)軟件來(lái)說(shuō),適當(dāng)?shù)囊?guī)范和標(biāo)準(zhǔn)絕不是消滅代碼內(nèi)容的創(chuàng)造性、優(yōu)雅性,而是限制過(guò)度個(gè)性化,以一種普遍認(rèn)可的統(tǒng)一方式一起做事,提升協(xié)作效率,降低溝通成本。代碼的字里行間流淌的是軟件系統(tǒng)的血液,質(zhì)量的提升是盡可能少踩坑,杜絕踩重復(fù)的坑,切實(shí)提升系統(tǒng)穩(wěn)定性,碼出質(zhì)量。

一、前端代碼規(guī)范Vue篇

1、Vue編碼基礎(chǔ)

Vue 項(xiàng)目規(guī)范以 Vue 官方規(guī)范https://v2.cn.vuejs.org/v2/style-guide/中的A規(guī)范為基礎(chǔ),在其上面進(jìn)行項(xiàng)目開發(fā),故所有代碼均遵守該規(guī)范。

請(qǐng)仔仔細(xì)細(xì)閱讀 Vue官方規(guī)范,切記,此為第一步。

1.1、組件規(guī)范

  • 組件名為多個(gè)單詞
    組件名應(yīng)該始終是多個(gè)單詞組成(大于等于 2),且命名規(guī)范為KebabCase格式。
    這樣做可以避免跟現(xiàn)有的以及未來(lái)的 HTML 元素相沖突,因?yàn)樗械?HTML 元素名稱都是單個(gè)單詞的。

正例:

export default {
  name: 'TodoItem',
  // ...
}

反例:

export default {
  name: 'Todo',
  // ...
}
export default {
  name: 'todo-item',
  // ...
}
  • 組件文件名為 pascal-case 格式

正例:

components/
|- my-component.vue

反例:

components/
|- myCoaponent.vue
|- MyCoaponent.vue
  • 基礎(chǔ)組件文件名為 base 開頭,使用完整單詞而不是縮寫

正例:

components/
|-base-button.vue
|-base-table.vue
|-base-icon.vue

反例:

components/
|- MySutton.vue
|- VueTable.vue
|- Icon.vue
  • 和父組件緊密屬合的子組件應(yīng)該以父組件名作為前綴命名

正例:

components/
|- todo-list.vue
|- todo-list-item.vue
|- todo-list-item-button.vue
|- user-profi1e-options.vue(完整單詞)

反例:

components/
|- TodoList.vue
|- TodoItem. vue
|- TodoButton.vue
|- UProfopts.vue(使用了縮寫)
  • 在Template 模版中使用組件,應(yīng)使用 PascalCase 模式,并且使用自閉合組件。

正例:

<1--在單文件組件、字符串模板和JSX中-->
<myComponent />
<Rom><table :colum="data"/></Rom>

反例:

<my-component /><row><table :column="data"/></row>
  • 組件的 data 必須是一個(gè)函致
    當(dāng)在組件中使用 data 屬性的時(shí)候 (除了 new Vue 外的任何地方),它的值必須是返回一個(gè)對(duì)象的函數(shù)。 因?yàn)槿绻卑词且粋€(gè)對(duì)象的話,子組件之間的屬性值會(huì)互相影響,

正例:

export default {
  name: 'App',
  data(){
    return{
      title:'我是一個(gè)標(biāo)題',
    }
  },
}

反例:

export default {
  name: 'App',
  data:{
    title:'我是一個(gè)標(biāo)題',
  },
}
  • Prop 定義應(yīng)該盡量詳細(xì)
    • 必須使用 camelCase 駝峰命名
    • 必須指定類型
    • 必須加上注釋,表明其含義
    • 必須加上 required 或者 default,兩者二選其一
    • 如果有業(yè)務(wù)需要,必須加上 validator 驗(yàn)證

正例:

export default {
  name: "HelloWorld",
  props: {
    //組件狀態(tài),用于控制組件的顏色
    status: {
      type: String,
      required: true,
      validator: function (value) {
        return ["succ", "info", "error"].indexof(value) !== -1;
      },
    },
    // 用戶級(jí)別,用于顯示皇冠個(gè)效
    userLevel: {
      type: String,
      required: true,
    },
  },
};
  • 為組件樣式設(shè)置作用域

正例:

<template>
  <div class="hello">
      HelloWorld
  </div>
</template>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.hello {
  color: white;
  font-size: 22px;
  margin: 10px 0 0;
}
</style>

反例:

<template>
  <div class="hello">
      HelloWorld
  </div>
</template>
<!-- 沒有scoped 特性-->
<style >
.hello {
  color: white;
  font-size: 22px;
  margin: 10px 0 0;
}
</style>
  • 如果特性元素較多,應(yīng)該主動(dòng)換行

正例:

      <MyComponent 
        foo="a" 
        bar="b" 
        baz="c">
      </MyComponent>

反例:

     <MyComponent foo="a" bar="b" baz="c"></MyComponent>

1.2、模板中使用簡(jiǎn)單的表達(dá)式

組件模板應(yīng)該只包含簡(jiǎn)單的表達(dá)式,復(fù)雜的表達(dá)式則應(yīng)該重構(gòu)為計(jì)算屬性或方法。復(fù)雜表達(dá)式會(huì)讓你的模極變得不那么聲明式。我們應(yīng)該盡量描述應(yīng)該出現(xiàn)的是什么,而非如何計(jì)算那個(gè)值。而且計(jì)算屬性和方法使得代碼可以重用。
正例:

<template>
  <div >
    {{ normalizedFullName }}
  </div>
</template>

<script>
export default {
  name: "HelloWorld",
  computed:{
    normalizedFullName:function(){
      return this.fullName.split(' ').map((word)=>{
        return word[0].toUpperCase()+word.split(1)
      }).join(' ')
    }
  }
};
</script>

反例:

<template>
  <div >
    {{ fullName.split(' ').map((word)=>{
        return word[0].toUpperCase()+word.split(1)
      }).join(' ')}}
  </div>
</template>

1.3、指令都使用縮寫形式

指令推薦都使用縮寫形式,(用 : 表示v·bind: ,用 @ 表示 v-on, 用#表示 v-slot:)
正例:

   <input
   @input="onInput"
   @focus="onFocus">

反例:

   <input
  v-on:input="onInput"
   @focus="onFocus">

1.4、 標(biāo)簽順序保持一致

單文件組件應(yīng)該總是讓標(biāo)簽順序保持為
正例:

<template>

</template>

<script>

</script>

<style scoped>

</style>

反例:

<template>

</template>

<style scoped>

</style>

<script>

</script>

1.5、必須為 v-for 設(shè)置鍵值 key

1.6、v-show 與 v-if 選擇

如果運(yùn)行時(shí),需要非常顏繁地切換,使用v·show;如果在運(yùn)行時(shí),條件很少改變,使用v-if。

1.7、script 標(biāo)簽內(nèi)部結(jié)構(gòu)順序

components>props>data>compued>watch>filter>鉤子函數(shù)(鉤子函數(shù)按其執(zhí)行順序)>methods

1.8、Vue Router 規(guī)范

  • 頁(yè)面跳轉(zhuǎn)數(shù)據(jù)傳遞使用路由參數(shù)
    頁(yè)面跳轉(zhuǎn),例如A頁(yè)面跳轉(zhuǎn)到B頁(yè)面,需要將A頁(yè)面的數(shù)據(jù)傳遞到B頁(yè)面,推使用路由參數(shù)進(jìn)行傳參,而不是將需要傳遞的數(shù)據(jù)保存 vuex,然后在 B頁(yè)面取出 vuex的數(shù)據(jù),因?yàn)槿绻?B頁(yè)面剛新會(huì)導(dǎo)致 vuex 數(shù)據(jù)丟失
    正例:
let id='1113'
this.$router.push({name:'userDetail',
	query:{
 	 id:id
	}
})
  • 使用路由懶加載(延遲加載)機(jī)制
{
    path: "/Login",
    name: "Login",
    // 登錄頁(yè)
    component: () => import('@/components/Login/Login.vue'),
}, 

3.router 中的命名規(guī)范
path、childrenPoints命名規(guī)范采用kebab-case命名規(guī)范(盡量vue文件的目錄結(jié)構(gòu)保持一致,因?yàn)槟夸?、文件名都是kebab-case,這樣很方便找到對(duì)應(yīng)的文件)

 {
        path:'/system/system-list',
        // 系統(tǒng)列表
        name:'SystemList',
        component:()=>import('../components/system/system-list.vue')
    }

4.router 中的 path 命名規(guī)范
path除了采用kebab-case命名規(guī)范以外,必須以/開頭,即使是children里的path也要以/開頭。如下示例
目的:
經(jīng)常有這樣的場(chǎng)景:某個(gè)頁(yè)面有問題,要立刻找到這個(gè)文件,如果不用以/開頭,path為parent和children組成的,可能經(jīng)常需要在router文件里搜索多次才能找到,而如用以/開頭,則能立刻搜索到對(duì)應(yīng)的組件

{
    path: '/',
    // 首頁(yè)
    name: 'home',
    component: () => import('../components/home/home.vue'),
    redirect: '/panel',
    // 重定向到看板頁(yè)
    children:[
        {
            path:'/panel',
            // 大屏面板
            name:'Panel',
            component:()=>import('../components/panel/panel.vue'),
            meta: {
                bg: 'bg'
            },
            // 背景圖
        },
        {
        path:'/system',
        // 系統(tǒng)設(shè)置
        name:'System',
        component:()=>import('../components/system/system.vue')
    }]
}

2、Vue 項(xiàng)目目錄規(guī)范

2.1、基礎(chǔ)

vue 項(xiàng)目中的所有命名一定要與后端命名統(tǒng)一。

比如權(quán)限:后端 privilege,前端無(wú)論 router,store,api等都必須使用 privielege 單詞!

2.2、使用 Vue-cli 腳手架

使用 vue·cli3 來(lái)初始化項(xiàng)目,項(xiàng)目名按照上面的命名規(guī)范

2.3、 目錄說(shuō)明

目錄名按照上面的命名規(guī)范,其中components 組件用大寫駝峰,其余除components 組件目錄外的所有目錄均便用 kebab-case 合名。

src源碼目錄

 |-- api 				所有api接口
 |-- assets 			靜志資源,images,icons,styles等
 |-- components			公用組件
 |-- config				配置信息
 |-- constants			常量信息,項(xiàng)目所有Enun,全局常量等
 |-- directives			自定義指令
 |-- filters			過(guò)濾器,全局工具
 |-- datas				模擬教據(jù),臨時(shí)存放
 |-- lib				外部引用的插件存放及修改文件
 |-- mock				模擬接口,臨時(shí)存放
 |-- plugins			插件,全局使用
 |-- router				路由,統(tǒng)一管理
 |-- store				vuex,統(tǒng)一管理
 |-- themes				自定義樣式主題
 |-- views				視圖目錄
 |  |-- role				role模塊名
 |  |-- role-list.vue		role列表頁(yè)面
 |  |-- role-add. vue		role新建頁(yè)面
 |  |-- role-update.vue		role更新頁(yè)面
 |  |-- index.less			role模塊樣式
 |  |-- components			role模塊通用組件文件夾
 |  |-- employee			employee模塊

1. api 目錄

  • 文件、變量命名要與后端保持一致。
  • 此目錄對(duì)應(yīng)后端 API 接口,按照后端一個(gè)controller 一個(gè)api.js文件。若項(xiàng)目較大時(shí),可以按照業(yè)務(wù)劃分子目錄,并與后端保持一致。
  • api中的方法名字要與后端 api url 盡量保持語(yǔ)義高度一致性。
  • 對(duì)于 api中的每個(gè)方法要添加注釋,注釋與后端swagger 接口文檔保持一致。

正例:

后端ulr:EmployeeController.java

/employee/add
/employee/delete/id
/employee/update

前端:employee.js

//添加員工
addEmployee:(data)=>{
	rerutn postAxios('/employee/add',data)
}
//更新員工
updateEmployee:(data)=>{
	rerutn postAxios('/employee/update',data)
}
//刪除員工
deleteEmployee:(employeeId)=>{
	rerutn postAxios('/employee/delete/'+employeeId)
}

2. assets目錄assels 為靜態(tài)資源,里面存放 images,styles,icons等靜態(tài)資源,靜態(tài)資源命名格式為 kebab-case

|-- assets
|-- images
|  |-- background-color.png
|  |-- upload-header.png
|-- styles

3.components目錄此目錄應(yīng)按照組件進(jìn)行目錄劃分,目錄命名為KebabCase,組件命名規(guī)則也為KebabCase

|--  error-log
|  |--index.vue
|  |-- index.less
|-- markdow-editor
|  |--index.vue
|  |--index.js
|-- kebab-case

4.constants 目錄此目錄存放項(xiàng)目所有常量,如果常量在vue 中使用,請(qǐng)使用vue-enum 插件(https://gitee.com/lab1024/vue-enum)
vue-enum目錄結(jié)構(gòu):

|--  index.js
|--  role.js
|--  employee.js

例子:index.js

export let enumInfo = {
    SOURCE_IN_TYPE: {
        PURCHASE_IN: {
            value: 1,
            desc: '采購(gòu)入庫(kù)'
        },
        REFUND_IN: {
            value: 2,
            desc: '退貨入庫(kù)'
        },
        CHECK_IN: {
            value: 3,
            desc: '盤點(diǎn)入庫(kù)'
        },
        CONFIRM_IN: {
            value: 4,
            desc: '取消訂單入庫(kù)'
        }
    }
}

5.router與store 目錄

這兩個(gè)目錄一定要將業(yè)務(wù)進(jìn)行拆分,不能放到一個(gè)文件里。
router 盡量按照 views 中的結(jié)構(gòu)保持一致
srore 按照業(yè)務(wù)進(jìn)行拆分不同的正文件

6.views 目錄

  • 命名要與后端、router、api等保持一致
  • components 中組件要使用 Pascalcase 規(guī)則
|-- views				視圖目錄
|  |-- role				role模塊名
|  |-- role-list.vue		role列表頁(yè)面
|  |-- role-add. vue		role新建頁(yè)面
|  |-- role-update.vue		role更新頁(yè)面
|  |-- index.less			role模塊樣式
|  |-- components			role模塊通用組件文件夾
|  |  |-- role-header.vue			role頭部組件
|  |  |-- role-modal.vue			role彈出窗組件
|  |-- employee			employee模塊
|  |-- behavior-log		行為日志log模塊
|  |-- code-generator	代碼生成器模塊

2.4、注釋說(shuō)明

整理必須加注釋的地方

  • 公共組件使用說(shuō)明
  • api 目錄的接口js 文件必須加注釋
  • store 中的 state,mutation, action等必須加注釋
  • vue 文件中的template 必須加注釋,若文件較大添加 slart end 注釋
  • vue 文件的 methods,每個(gè)method 必須添加注釋
  • vue 文件的 data,非常見單詞要加注釋

2.5、其他

  • 盡量不要手動(dòng)操作 DOM
    因使用 vue 框架,所以在項(xiàng)目開發(fā)中盡量使用 vue 的數(shù)據(jù)驅(qū)動(dòng)更新 DOM,盡量(不到萬(wàn)不得已)不要手動(dòng)操作DOM,包括:增刪改 dom 元素、以及更改樣式、添加事件等
  • 刪除無(wú)用代碼
    因使用了 git/svn 等代碼版本工具,對(duì)于無(wú)用代碼必須及時(shí)刪除,例如:一些調(diào)試的console 語(yǔ)句、無(wú)用的棄用功能代碼.

總結(jié)

到此這篇關(guān)于前端開發(fā)必備小技巧之前端代碼規(guī)范Vue篇的文章就介紹到這了,更多相關(guān)前端代碼規(guī)范Vue篇內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論