vue組件設計

Vue設計思想

組件設計主要是模塊設計,主要體現(xiàn)在UI、基本功能、業(yè)務需求、性能。
UI即我們寫的html代碼主要是界面布局樣式等。
基本功能指的是實現(xiàn)我們需要的如按鈕的常用功能。
業(yè)務需求指的是在基礎功能的基礎上進行場景化的添加。
性能指組件的渲染時間等。
例子實現(xiàn)一個按鈕組件:

  <div :class="[readonly?'readonly-hover':'',appointment?'appointment-style':'',ghost?'primary-ghost':'']" class="button-wrap">
    {{ text }}
  </div>
</template>
<script>
export default {
name: 'BtnComponent',
//所有得樣式都根據(jù)使用情況,根據(jù)props來傳
  props: ['text', 'readonly', 'appointment', 'ghost'],
};
</script>
<style scoped lang="less">
.button-wrap{
    display: flex;
    justify-content: center;
    align-items: center;
    color: #fff;
    height: 40px;
    background-color: #FFFFFF;
    border-radius: 3px;
    cursor: pointer;
    -moz-user-select:none; /*火狐*/
    -webkit-user-select:none; /*webkit瀏覽器*/
    -ms-user-select:none; /*IE10*/
    -khtml-user-select:none; /*早期瀏覽器*/
    user-select:none;
    transition: background-color 0.2s linear;
    &:hover{
      background-color: #57a3f3;
    }
}
.appointment-style{
  &:hover{
      background-color: #3F7DD7;
    }
}
.primary-ghost{
  color: #57a3f3;
  border: 1px solid #57a3f3;
  background-color: #fff;
  &:hover{
    background-color: rgba(81, 151, 252, 0.2);
  }
}
.readonly-hover{
  color:#AFC0D4;
  border-color: #AFC0D4;
}
.readonly-hover:hover{
  background: #FFFFFF;
    cursor:not-allowed;
}
</style>

在頁面中調用時:

      @click.native="getCode"
      :text="codeMsg"
      :readonly="sendFlag"
      style="width:35%"
    />
Vue封裝主要的API

Vue組件的主要是能夠接收父組件傳過來的值以及方法,還有使用匿名或具名槽進行html部分的代碼的嵌入。
主要的使用的是Vue的props、event、solt.
props表示組件接收的參數(shù),最好用對象的寫法,這樣可以針對每個屬性設置類型、默認值或自定義校驗屬性的值,此外還可以通過type、validator等方式對輸入進行驗證。
slot可以給組件動態(tài)插入一些內容或組件,是實現(xiàn)高階組件的重要途徑;當需要多個插槽時,可以使用具名slot
event是子組件向父組件傳遞消息的重要途徑。

組件中需要避免
  • 避免隱性的父子間通信
    應該優(yōu)先通過prop跟事件進行父子組件通信,而不是使用this.$parent或者改變prop。
    vue應用是prop向下傳遞,事件向上傳遞。問題在于這樣使用方便但是會犧牲數(shù)據(jù)流的簡潔性。
  • 避免在scoped中使用元素選擇器。
  • 避免v-if跟v-for一起使用,可以更換為在一個計算器屬性上遍歷并過濾列表.。
如何拆分組件通常有兩種場景
  • 基礎組件
    主要是指可復用,實現(xiàn)某類功能,且不包含任何業(yè)務的組件,比如像 ElementUI 這樣的組件庫,提供的就是基礎組件庫。
    但是基礎組件并不一定是單一組件,它可以是一個復合組件,由若干更小的組件單元甚至是其它基礎組件組成。比如 Table 組件,它內部就是由 Header、Body 組件組成。
  • 業(yè)務組件
    業(yè)務組件是在基礎組件的基礎上,開發(fā)出的融入業(yè)務邏輯的復合組件,通常,業(yè)務組件是為了解決某個特定的業(yè)務場景,它的復用性相比于基礎組件而言,沒有那么的強。
    不過,業(yè)務組件也是可以復用的。比如彈窗登錄的場景,就有一套完整的業(yè)務邏輯以及和服務端的交互流程,我們可以把它拆成一個登錄組件,這樣就可以在頁面中方便的接入和復用。
    在日常開發(fā)工作中,需不需要把某類場景的業(yè)務抽象成業(yè)務組件,因為隨著業(yè)務組件的積累,工作效率也會得到明顯的提升。-
    因此,拆分組件主要是從代碼的復用性和維護性方面考慮,另外,從性能方面考慮,組件拆分粒度不易過細。
組件的顆粒度

在組件的掛載過程中,出了前面說的創(chuàng)建和渲染 VNode 之外,內部還創(chuàng)建一個組件實例,用來維護組件的狀態(tài)和數(shù)據(jù),此外,還有組件初始化階段的一些響應式數(shù)據(jù)處理,都會有一定耗時和內存占用。
拆分組件力度過細,會導致嵌套組件過深,顯而易見是整個應用的初始化時長會變長,占用的內存空間也會變大。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文章是我最近在公司的一場內部分享的內容。我有個習慣就是每次分享都會先將要分享的內容寫成文章。所以這個文集也是用來...
    Awey閱讀 9,571評論 4 67
  • 組件(Component)是 Vue.js 最核心的功能,也是整個框架設計最精彩的地方,當然也是最難掌握的。本章將...
    遼A丶孫悟空閱讀 624評論 1 13
  • 參考原文鏈接:https://vuejsdevelopers.com/2018/06/18/vue-compone...
    KimYYX閱讀 1,101評論 0 0
  • 1.1、Vue組件注冊 注冊vue組件的步驟:創(chuàng)建組件構建器 注冊組件 使用組件。 總結: 創(chuàng)建組件的基本步驟: ...
    神秘碼農閱讀 476評論 0 1
  • 一、組件 個人理解:為了復用代碼而進行封裝代碼,以及封裝代碼塊之間的通信 1、全局組件 注:(1)、table標簽...
    wsgdiv閱讀 479評論 1 2

友情鏈接更多精彩內容