日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一個(gè)優(yōu)秀的Vue團(tuán)隊(duì)代碼規(guī)范是什么樣子的?

 規(guī)范與每個(gè)團(tuán)隊(duì)和個(gè)人都是息息相關(guān)的,因?yàn)槠溆绊懙牟恢皇侵皇谴a的維護(hù)和理解成本,嚴(yán)重的時(shí)候是會影響成員開發(fā)的心情

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

一個(gè)團(tuán)隊(duì)的編碼規(guī)范、git規(guī)范等,并沒有絕對的最優(yōu)解,心里要清楚明白沒有銀彈,規(guī)范是為了讓團(tuán)隊(duì)統(tǒng)一,提高代碼閱讀性、降低代碼維護(hù)成本等,本文是記錄一些在項(xiàng)目code review中常見的規(guī)范,僅供參考

JS部分

和渲染無關(guān)的數(shù)據(jù)

vue中data的數(shù)據(jù)默認(rèn)便會進(jìn)行雙向數(shù)據(jù)綁定,若是將大量的和渲染無關(guān)的數(shù)據(jù)直接放置在data中,將會浪費(fèi)雙向數(shù)據(jù)綁定時(shí)所消耗的性能,將這些和渲染無關(guān)的數(shù)據(jù)進(jìn)行抽離并配合Object.freeze進(jìn)行處理

table中columns數(shù)據(jù)可以單獨(dú)提取一個(gè)外部js文件作為配置文件,也可以在當(dāng)前.vue文件中定義一個(gè)常量定義columns數(shù)據(jù),因?yàn)闊o論如何都是固定且不會修改的數(shù)據(jù),應(yīng)該使用Object.freeze進(jìn)行包裹,既可以提高性能還可以將固定的數(shù)據(jù)抽離,一些下拉框前端固定的數(shù)據(jù)也建議此操作 

 
 
 
  1. const columnList = Object.freeze([  
  2.   { title: '姓名', key: 'name', align: 'center' },  
  3.   { title: '性別', key: 'gender', align: 'center' }  
  4. ]) 

需要注意的是 Object.freeze() 凍結(jié)的是值,這時(shí)仍然可以將變量的引用替換掉,還有確保數(shù)據(jù)不會變才可以使用這個(gè)語法,如果要對數(shù)據(jù)進(jìn)行修改和交互,就不適合使用凍結(jié)了。

Modal框的控制

一個(gè)頁面種通常會存在很多個(gè)不同功能的彈框,若是每一個(gè)彈框都設(shè)置一個(gè)對應(yīng)的變量來控制其顯示,則會導(dǎo)致變量數(shù)量比較冗余和命名困難,可以使用一個(gè)變量來控制同一頁面中的所有Modal彈框的展示

比如某個(gè)頁面中存在三個(gè)Modal彈框 

 
 
 
  1. // bad  
  2. // 每一個(gè)數(shù)據(jù)控制對應(yīng)的Modal展示與隱藏  
  3. new Vue({  
  4.     data() {  
  5.         return {  
  6.             modal1: false,  
  7.             modal2: false,  
  8.             modal3: false,  
  9.         }  
  10.     }  
  11. })  
  12. // good  
  13. // 當(dāng)modalType為對應(yīng)的值時(shí) 展示其對應(yīng)的彈框  
  14. new Vue({  
  15.     data() {  
  16.         return {  
  17.             modalType: '' // modalType值為 modal1,modal2,modal3  
  18.         }  
  19.     }  
  20. }) 

debounce使用

例如遠(yuǎn)程搜索時(shí)需要通過接口動態(tài)的獲取數(shù)據(jù),若是每次用戶輸入都接口請求,是浪費(fèi)帶寬和性能的

當(dāng)一個(gè)按鈕多次點(diǎn)擊時(shí)會導(dǎo)致多次觸發(fā)事件,可以結(jié)合場景是否立即執(zhí)行immediate 

 
 
 
  1.   
  2.     {{item.label}}  
  3.   
 
 
 
  1. import {debounce} from 'lodash'  
  2. methods:{  
  3.     remoteMethod:debounce(function (query) {  
  4.         // to do ...  
  5.        // this 的指向沒有問題  
  6.     }, 200),  

圖片

功能的開發(fā)過程中,圖片的處理往往是比較容易被忽略的環(huán)節(jié),也會在一定程度影響開發(fā)的效率和頁面的性能

  •  圖片壓縮問題,除非特別要求圖片必須高質(zhì)量的顯示,否則都應(yīng)該進(jìn)行對應(yīng)的壓縮處理
  •  不同業(yè)務(wù)場景進(jìn)行圖片格式的選型
    •   JPG 適用于呈現(xiàn)色彩豐富的圖片,JPG 圖片經(jīng)常作為大的背景圖、輪播圖或 Banner 圖出現(xiàn)等
    •   Logo、顏色簡單且對比強(qiáng)烈的圖片或背景、需要透明度等
    •   將常用且變動頻率很低的小圖片進(jìn)行合并成雪碧圖,對于變動比較頻繁和小于6KB的圖片進(jìn)行base64處理
    •   根據(jù)項(xiàng)目圖片數(shù)量和項(xiàng)目的用戶機(jī)型分布等,考慮采取webp進(jìn)行圖片的處理

路由組件傳參

在組件中使用 $route 會使之與其對應(yīng)路由形成高度耦合,從而使組件只能在某些特定的 URL 上使用,限制了其靈活性。

使用 props 將組件和路由解耦:

取代與 $route 的耦合 

 
 
 
  1. const User = {  
  2.   template: '
    User {{ $route.params.id }}
  3. }  
  4. const router = new VueRouter({  
  5.   routes: [  
  6.     { path: '/user/:id', component: User }  
  7.   ]  
  8. }) 

通過 props 解耦

這樣你便可以在任何地方使用該組件,使得該組件更易于重用和測試。 

 
 
 
  1. const User = {  
  2.   props: ['id'],  
  3.   template: '
    User {{ id }}
    '  
  4. }  
  5. const router = new VueRouter({  
  6.   routes: [  
  7.     { path: '/user/:id', component: User, props: true },  
  8.     // 對于包含命名視圖的路由,你必須分別為每個(gè)命名視圖添加 `props` 選項(xiàng):  
  9.     {  
  10.       path: '/user/:id',  
  11.       components: { default: User, sidebar: Sidebar },  
  12.       props: { default: true, sidebar: false }  
  13.     }  
  14.   ]  
  15. }) 

參考:路由組件傳參

Vue生命周期

在父子組件中,掌握父子組件對應(yīng)的生命周期鉤子加載順序可以讓開發(fā)者在更合適的時(shí)候做適合的事情父組件 

 
 
 
  1.   
  2.  

子組件 

 
 
 
  1.   
  2.  

加載時(shí)父子組件的加載順序 

 
 
 
  1. home beforeCreate --> home created --> home beforeMount --> list created --> list beforeMount --> list mounted 

銷毀時(shí)父子組件的銷毀順序 

 
 
 
  1. home beforeDestroy --> list beforeDestroy --> list destroyed --> home destroyed 

實(shí)際開發(fā)過程中會遇到當(dāng)子組件某個(gè)生命周期完成之后通知父組件,然后在父組件做對應(yīng)的處理

emit up 

 
 
 
  1. // 子組件在對應(yīng)的鉤子中發(fā)布事件  
  2. created(){  
  3.   this.$emit('done')  
  4. }  
  5. // 父組件訂閱其方發(fā)  
  6.  

hook

通過@hook監(jiān)聽子組件的生命周期 

 
 
 
  1.  

Select優(yōu)化

下拉框遍歷時(shí),需要注意options標(biāo)簽保持同一行,若是存在換行,會導(dǎo)致選中時(shí)的值存在多余的空白 

 
 
 
  1.   
  2.   
  3.       
  4.         {{item.label}}  
  5.       
  6.  

需要將Options和下拉框的值保持在同一行 

 
 
 
  1.   
  2.   
  3.     {{item.label}}  
  4.  

data數(shù)據(jù)層級

data數(shù)據(jù)具有數(shù)據(jù)層級結(jié)構(gòu),切勿過度扁平化或者嵌套層級過深,若是過度扁平化會導(dǎo)致數(shù)據(jù)命名空間沖突,參數(shù)傳遞和處理,若是層級嵌套過深也會導(dǎo)致vue數(shù)據(jù)劫持的時(shí)候遞歸層級過深,若是嵌套層級喪心病狂那種的,小心遞歸爆棧的問題。而且層級過深會導(dǎo)致數(shù)據(jù)操作和處理不便,獲取數(shù)據(jù)做容錯(cuò)處理也比較繁瑣。一般層級保持2-3層最好。

若是只有一層數(shù)據(jù),過于扁平 

 
 
 
  1. {  
  2.     name: '',  
  3.     age: '',  
  4.     gender: ''  

導(dǎo)致處理不方便 

 
 
 
  1. // 作為接口參數(shù)傳遞  
  2. ajax({  
  3.  this.name, this.age, this.gender  
  4. })  
  5. // 接口獲取數(shù)據(jù),批量處理  
  6. ajax().then(res => {  
  7.  const {name, age, gender} = res.data  
  8.     this.name = name  
  9.     this.age = age  
  10.     this.gender = gender  
  11. }) 

適當(dāng)?shù)膶蛹壗Y(jié)構(gòu)不僅增加代碼的維護(hù)和閱讀性,還可以增加操作和處理的便捷性 

 
 
 
  1. {  
  2.     person: { // 個(gè)人信息  
  3.         name: '',  
  4.         age: '',  
  5.         gender: ''  
  6.     }  

可以針對person進(jìn)行操作 

 
 
 
  1. // 作為接口參數(shù)傳遞  
  2. ajax(this.person)  
  3. // 接口獲取數(shù)據(jù),批量處理  
  4. ajax().then(res => {  
  5.  const {name, age, gender} = res.data  
  6.     this.$set(this, 'person', {name, age, gender})  
  7. }) 

策略模式

策略模式的使用,避免過多的if else判斷,也可以替代簡單邏輯的switch 

 
 
 
  1. const formatDemandItemType = (value) => {  
  2.     switch (value) {  
  3.         case 1:  
  4.             return '基礎(chǔ)'  
  5.         case 2:  
  6.             return '高級'  
  7.         case 3:  
  8.             return 'VIP'  
  9.     }  
  10. }  
  11. // 策略模式  
  12. const formatDemandItemType2 = (value) => {  
  13.     const obj = {  
  14.         1: '基礎(chǔ)',  
  15.         2: '高級',  
  16.         3: 'VIP',  
  17.     }   
  18.     return obj[value]  

解構(gòu)

解構(gòu)賦值以及默認(rèn)值,當(dāng)解構(gòu)的數(shù)量小于多少時(shí)適合直接解構(gòu)并賦值默認(rèn)值,數(shù)據(jù)是否進(jìn)行相關(guān)的聚合處理 

 
 
 
  1. const {  
  2.   naem = '',  
  3.   age = 10,  
  4.   gender = 'man'  
  5. } = res.data  
  6. // bad  
  7. this.name = name  
  8. this.age = age  
  9. this.gender = gender  
  10. // good  
  11. this.person = {  
  12.   naem,  
  13.   age,  
  14.   gender  

職責(zé)單一

任何時(shí)候盡量是的一個(gè)函數(shù)就做一件事情,而不是將各種邏輯全部耦合在一起,提高單個(gè)函數(shù)的復(fù)用性和可讀性

每個(gè)頁面都會在加載完成時(shí)進(jìn)行數(shù)據(jù)的請求并展示到頁面 

 
 
 
  1. created() {  
  2.   this.init();  
  3. },  
  4. methods: {  
  5.   // 將全部的請求行為聚合在init函數(shù)中  
  6.   // 將每個(gè)請求單獨(dú)拆分  
  7.   init() {  
  8.     this.getList1()  
  9.     this.getList2()  
  10.   },  
  11.   getList1() {  
  12.     // to do ...  
  13.   },  
  14.   getList2() {  
  15.     // to do ...  
  16.   }  

v-bind

HTML部分

html書寫

編寫template模板時(shí),屬性過多時(shí),是否換行 

 
 
 
  1.  

實(shí)體使用

html中展示一些如<,>,&等字符時(shí),使用字符實(shí)體代替 

 
 
 
  1.   
  2.   
  3.   > 1 & < 12  
  
  •   
  •   
  •   > 1 & < 12  
  •  

    CSS部分

    樣式穿透

    在開發(fā)中修改第三方組件樣式是很常見,但由于 scoped 屬性的樣式隔離,可能需要去除 scoped 或是另起一個(gè) style 。這些做法都會帶來副作用(組件樣式污染、不夠優(yōu)雅),樣式穿透在css預(yù)處理器中使用才生效。

    •  less使用  /deep/ 
     
     
     
    1.   
    2. .content /deep/ .el-button {  
    3.  height: 60px;  
    4. }  
    5.  
    •  scss使用 ::v-deep 
     
     
     
    1.   
    2. .content ::v-deep .el-button {  
    3.   height: 60px;  
    4. }  
    5.  
    •  stylus使用 >>> 
     
     
     
    1.   
    2. 外層 >>> .custon-components{  
    3.   height: 60px; 
    4.  }  
    5.  

    空格

    適當(dāng)?shù)目崭窨梢蕴嵘a的閱讀體驗(yàn),顯得更為優(yōu)雅和美觀

    選擇器后、屬性值 

     
     
     
    1. .custom-style { // 選擇器和{ 之間空格  
    2.   margin: 0; // 屬性值前  
    3.   transform: scale(1.5, 2.2); // 逗號之后增加空格  

    換行

    和html類型,當(dāng)某行的屬性很多,適當(dāng)?shù)膿Q行可以提高閱讀和美觀 

     
     
     
    1. .custom-style{  
    2.   // 可以在一次聲明中定義一個(gè)或多個(gè)屬性  
    3.   background: background-clip  
    4.     background-color  
    5.     background-image  
    6.     background-origin  
    7.     background-position  
    8.     background-repeat  
    9.     background-size;  

    當(dāng)一個(gè)規(guī)則包含多個(gè)選擇器時(shí),每個(gè)選擇器聲明必須獨(dú)占一行,過長導(dǎo)致需要橫向滾動閱讀剩余的內(nèi)容,應(yīng)該盡量使得閱讀順序縱向化 

     
     
     
    1. .custom .header .title,  
    2. .other .header .title { 
    3.   color: #f0f;  

    嵌套層級

    瀏覽器在解析css時(shí),是按照從右到左遞歸匹配的,過深的層級嵌套不僅影響性能,而且還會導(dǎo)致樣式閱讀性和代碼維護(hù)性降低,一般層架控制在5層之內(nèi)

    雙引號

    屬性選擇器中的值必須用雙引號包圍,不允許使用單引號,也不允許不使用引號,html的屬性值也是推薦使用雙引號,js中使用單引號 

     
     
     
    1. .custom-style{  
    2. font-family: "PingFang SC", "STHeitiSC-Light";  

    屬性順序

    同一 規(guī)則下的屬性在書寫時(shí),應(yīng)按功能進(jìn)行分組。并以 Formatting Model(布局方式、位置) > Box Model(尺寸) > Typographic(文本相關(guān)) > Visual(視覺效果) 的順序書寫,以提高代碼的可讀性。

    解釋:

    •  Formatting Model 相關(guān)屬性包括:position / top / right / bottom / left / float / display / overflow 等
    •  Box Model 相關(guān)屬性包括:border / margin / padding / width / height 等
    •  Typographic 相關(guān)屬性包括:font / line-height / text-align / word-wrap 等
    •  Visual 相關(guān)屬性包括:background / color / transition / list-style 等

    另外,為增加可讀性,如果包含 content 屬性,應(yīng)放在屬性的最前面。


    網(wǎng)站題目:一個(gè)優(yōu)秀的Vue團(tuán)隊(duì)代碼規(guī)范是什么樣子的?
    轉(zhuǎn)載注明:http://www.dlmjj.cn/article/dpphjig.html