我们在开发过程中,因为需求的变更,往往会遇见对现有组件的改造和扩展。

那么我们有什么方法对现有组件进行改造和扩展呢?

常见的我们可以使用mixins方式

下面就让我们来看一下怎么使用mixins方式对组件进行改造

我们来先创建一个简单的组件,如一个button和一个数字,点击一次数字加一

<template>
<div class="home">
<p>{{ count }}</p>
<button @click="addcount()">新增</button>
</div>
</template> <script> export default {
name: 'homeworld',
data () {
return {
count: 0
}
},
methods: {
addcount () {
this.count++;
}
}
}
</script>

如果我们现在想改变需求,点击按钮,数字新增,但是新增我的值我们自己定义

使用mixins实现,下面是改造过后的组件

<script>
import helloworld from './HelloWorld'
export default {
name: 'homeworld',
props: ['index'], // index为传入的数量
mixins: [helloworld], // mixins 原先的组件
methods: {
//重写 addcount 方法
addcount () {
this.count += parseInt(this.index);
}
}
}
</script>

如果我们调用下面的组件并且传入属性index=5, 那么我们就会实现没点击一次count+5

使用mixins我们确实可以实现对现有组件的改造,但是他也是有一些缺点的,

1.我们必须要知道改造组件的内部结构,就如我们不知道点击事件名,那么我们就不能重写新的点击事件,我们也需要知道组件的内部属性等等。

2.两个组件有很强的依赖性,如果是嵌套加嵌套,代码就很难去追寻本源,太乱了。

那么我们有没有更好的方法去对组件进行扩展呢?

答案是有的我们可以使用高级组件,专业术语是HOC,其实就是包裹组件的组件

其实常见的高阶组件我们经常使用,如keep-alive, transition,一个是缓存组件,一个是动画

Vue目前还是使用mixin作为官方的组件复用方式。

如果想了解更多的hot可以看看这篇文章

https://github.com/coolriver/coolriver-site/blob/master/markdown/vue-mixin-hoc.md

  1. 暂时由热心人士产出了一个npm包: vue-hoc来帮助Vue方便地实现HOC.
  2. 官方暂时不考虑将HOC加入vue core中,因为觉得相比于mixin的优势不够巨大。

自己也试了一些,感觉hoc达不到自己想要的那种效果。可能还是自己不够理解。

vue-mixins和vue高阶组件的更多相关文章

  1. vue的高阶组件

    探索Vue高阶组件 探索Vue高阶组件的使用 Vue高阶组件的使用方法 高阶组件应用-组件重新实例化 深入理解React 高阶组件 探索Vue高阶组件 2018-01-05 探索Vue高阶组件 Vue ...

  2. vue源码cached高阶函数解析

    1.源代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...

  3. Mixins 改成使用高阶组件调用

    把组件放在另外一个组件的 render 方法里面, 并且利用了 {...this.props} {...this.state} 这些  JSX 展开属性 对比下2种代码: 原始方式: <!DOC ...

  4. 浅析为什么用高阶组件代替 Mixins

    转载来源 感谢分享 Mixins 引入了无形的依赖 应尽量构建无状态组件,Mixin 则反其道而行之 Mixin 可能会相互依赖,相互耦合,不利于代码维护 不同的 Mixin 中的方法可能会相互冲突 ...

  5. 聊聊React高阶组件(Higher-Order Components)

    使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低 ...

  6. react_结合 redux - 高阶函数 - 高阶组件 - 前端、后台项目打包运行

    Redux 独立的集中式状态管理 js 库 - 参见 My Git 不是 react 库,可以与 angular.vue 配合使用,通常和 react 用 yarn add redux import ...

  7. React文档(二十四)高阶组件

    高阶组件(HOC)是React里的高级技术为了应对重用组件的逻辑.HOCs本质上不是React API的一部分.它是从React的组合性质中显露出来的模式. 具体来说,一个高阶组件就是一个获取一个组件 ...

  8. React高阶组件总结

    在多个不同的组件中需要用到相同的功能,这个解决方法,通常有Mixin和高阶组件. Mixin方法例如: //给所有组件添加一个name属性 var defaultMixin = { getDefaul ...

  9. React 高阶组件浅析

    高阶组件的这种写法的诞生来自于社区的实践,目的是解决一些交叉问题(Cross-Cutting Concerns).而最早时候 React 官方给出的解决方案是使用 mixin .而 React 也在官 ...

随机推荐

  1. STS热部署方法(springboot)

    sts热部署,即是在项目中修改代码不用重新启动服务,提高效率.   方法如下: 1.在pom文件中引入  devtools  依赖: <dependency> <groupId> ...

  2. ValueError: Unable to determine SOCKS version from socks://127.0.0.1:1080/

    使用ss之后输入conda指令出现错误:“ValueError: Unable to determine SOCKS version from socks://127.0.0.1:1080/”. 解决 ...

  3. textarea 自动高度

    textarea 自动撑开高度 var textAreaArr = document.querySelectorAll('.textarea'); for (var i = 0; i < tex ...

  4. centos 系统时间设置

    在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况.如果没有安装,而你使用的是 CentOS系统 那使用命令 yum insta ...

  5. MySQL定时任务实现方法

    类型一:每隔一分钟插入一条数据:   参数说明: DEFINER:创建者: ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件, ...

  6. 11、kubernetes之dashboard

    一.准备dashboard使用的证书 # cd /etc/kubernetes/pki/ pki]# (umask 077; openssl genrsa -out dashboard.key 204 ...

  7. 使用SNMP监控服务器运行情况

    系统监测的基本概念及分类: a.系统监测的概述: 如何对现有IT架构的整体以及细节运行情况进行科学.系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容.随着当前企业IT环境中服务器.应用 ...

  8. hive跑mapreduce报java.lang.RuntimeException: Error in configuring object

    写于2016.7月 最近项目需要在hbase上做统计分析,在本机上装了hive,结果跑小批量数据sum时报错: hive> select count(*) from page_view; Tot ...

  9. sql 游标的关闭和释放

    如果不关闭游标,就会 消息 ,级别 ,状态 ,过程 (过程名),第 xx 行 名为 'c1' 的游标已存在. 消息 ,级别 ,状态 ,过程 (过程名),第 xx 行 游标已打开. 如何关闭游标,其实和 ...

  10. js脚本实现在该界面直接跳转到一个登录界面并且自动登录

    1:首先说明的是自动登录也是需要密码的,这是前一个网页传输过去的 2:这里我使用的是post提交表单的形式 <------------------------------------------ ...