vue组件设计

Vue设计思想

组件设计主要是模块设计,主要体现在UI、基本功能、业务需求、性能。
UI即我们写的html代码主要是界面布局样式等。
基本功能指的是实现我们需要的如按钮的常用功能。
业务需求指的是在基础功能的基础上进行场景化的添加。
性能指组件的渲染时间等。
例子实现一个按钮组件:

  <div :class="[readonly?'readonly-hover':'',appointment?'appointment-style':'',ghost?'primary-ghost':'']" class="button-wrap">
    {{ text }}
  </div>
</template>
<script>
export default {
name: 'BtnComponent',
//所有得样式都根据使用情况,根据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表示组件接收的参数,最好用对象的写法,这样可以针对每个属性设置类型、默认值或自定义校验属性的值,此外还可以通过type、validator等方式对输入进行验证。
slot可以给组件动态插入一些内容或组件,是实现高阶组件的重要途径;当需要多个插槽时,可以使用具名slot
event是子组件向父组件传递消息的重要途径。

组件中需要避免
  • 避免隐性的父子间通信
    应该优先通过prop跟事件进行父子组件通信,而不是使用this.$parent或者改变prop。
    vue应用是prop向下传递,事件向上传递。问题在于这样使用方便但是会牺牲数据流的简洁性。
  • 避免在scoped中使用元素选择器。
  • 避免v-if跟v-for一起使用,可以更换为在一个计算器属性上遍历并过滤列表.。
如何拆分组件通常有两种场景
  • 基础组件
    主要是指可复用,实现某类功能,且不包含任何业务的组件,比如像 ElementUI 这样的组件库,提供的就是基础组件库。
    但是基础组件并不一定是单一组件,它可以是一个复合组件,由若干更小的组件单元甚至是其它基础组件组成。比如 Table 组件,它内部就是由 Header、Body 组件组成。
  • 业务组件
    业务组件是在基础组件的基础上,开发出的融入业务逻辑的复合组件,通常,业务组件是为了解决某个特定的业务场景,它的复用性相比于基础组件而言,没有那么的强。
    不过,业务组件也是可以复用的。比如弹窗登录的场景,就有一套完整的业务逻辑以及和服务端的交互流程,我们可以把它拆成一个登录组件,这样就可以在页面中方便的接入和复用。
    在日常开发工作中,需不需要把某类场景的业务抽象成业务组件,因为随着业务组件的积累,工作效率也会得到明显的提升。-
    因此,拆分组件主要是从代码的复用性和维护性方面考虑,另外,从性能方面考虑,组件拆分粒度不易过细。
组件的颗粒度

在组件的挂载过程中,出了前面说的创建和渲染 VNode 之外,内部还创建一个组件实例,用来维护组件的状态和数据,此外,还有组件初始化阶段的一些响应式数据处理,都会有一定耗时和内存占用。
拆分组件力度过细,会导致嵌套组件过深,显而易见是整个应用的初始化时长会变长,占用的内存空间也会变大。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,695评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,569评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,130评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,648评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,655评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,268评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,835评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,740评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,286评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,375评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,505评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,185评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,873评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,357评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,466评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,921评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,515评论 2 359

推荐阅读更多精彩内容

  • 本文章是我最近在公司的一场内部分享的内容。我有个习惯就是每次分享都会先将要分享的内容写成文章。所以这个文集也是用来...
    Awey阅读 9,452评论 4 67
  • 组件(Component)是 Vue.js 最核心的功能,也是整个框架设计最精彩的地方,当然也是最难掌握的。本章将...
    辽A丶孙悟空阅读 564评论 1 13
  • 参考原文链接:https://vuejsdevelopers.com/2018/06/18/vue-compone...
    KimYYX阅读 1,061评论 0 0
  • 1.1、Vue组件注册 注册vue组件的步骤:创建组件构建器 注册组件 使用组件。 总结: 创建组件的基本步骤: ...
    神秘码农阅读 411评论 0 1
  • 一、组件 个人理解:为了复用代码而进行封装代码,以及封装代码块之间的通信 1、全局组件 注:(1)、table标签...
    wsgdiv阅读 437评论 1 2