Vue中如何扩展⼀个组件

按照逻辑扩展和内容扩展来列举:
逻辑扩展有:mixins、extends、composition api;
内容扩展有: slots;

一、Mixin

组件和组件之间有时候会存在相同的代码逻辑,我们希望对相同的代码逻辑进行抽取,
vue3中支持使用composition api

1.如果是data函数的返回值对象

  • 返回值对象默认情况下会进行合并
    如果data返回值对象的属性发生了冲突,那么会保留组件自身的数据

2.如何生命周期钩子函数

  • 生命周期的钩子函数会被合并到数组中,都会被调用
    先执行Mixin中对应的逻辑,在执行组件中对应生命周期钩子的逻辑

3.值为对象的选项,例如 methods、components 和 directives,将被合并为同一个对象

  • 比如都有methods选项,并且都定义了方法,那么它们都会生效
    但是如果对象的key相同,那么会取组件对象的键值对

4.全局混入

const app = createApp(App)
app.mixin({created() {console.log('全局混入')}
})

5.局部混入

export default {name: 'App',// 一个组件可以混入多个,所以mixins所对应的值是一个对象mixins: [fooMixin]
}

二、extends

从实现角度来看,extends 几乎和 mixins 相同

<template><div><h2>{{ msg }}</h2><button @click="foo">click ms</button></div>
</template><script>
import BaseComponent from './BaseComponent.vue'
export default {name: 'App',extends: BaseComponent
}
</script>

三、composition api

1.composition API 对比 mixin

mixin缺点:
  • 渲染上下文中使用的属性来源不清晰。(例如在阅读一个运用了多个 mixin 的模板时,很难看出某个属性是从哪个 mixin 中注入的)

  • 命名空间冲突。(mixin 之间的属性和方法可能有冲突)

composition API优点
  • 暴露给模板的属性来源十分清晰,因为它们都是被组合逻辑函数返回的值
  • 不存在命名空间冲突,可以通过解构任意命名
  • 不需要为逻辑复用创建组件实例(不理解)
  • 仅依赖它的参数和 Vue 全局导出的 API,而不依赖 this 上下文(不理解)

1、composition api-代码提取

让我们使用Composition API重构上面定义的组件,以使我们定义的功能位于JavaScript模块 useCounter 中(在特性描述前面加上“use”是一种Composition API命名约定)

//useCounter.js
import { ref, computed } from "vue";
export default function () {const count = ref(0);const double = computed(() => count * 2)function increment() {count.value++;}return {count,double,increment}
}

2、composition api代码重用

// MyComponent.js
import useCounter from "./useCounter.js";export default {setup() {const { count, double, increment } = useCounter();return {count,double,increment}}
}

四、slot
vue3中废除slot、slot-scop,
slot替换成v-slot:插槽名,v-slot简写为#,
slot-scop替换成v-slot:xxx=“slotProps”

Vue中如何扩展⼀个组件相关推荐

  1. [vue] vue中什么是递归组件?举个例子说明下?

    [vue] vue中什么是递归组件?举个例子说明下? 组件自己调用自己,场景有用于生成树形结构菜单 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主 ...

  2. class根据状态 vue_搞懂并学会运用 Vue 中的无状态组件

    啥是应用程序状态,为什么咱们需要它? 状态管理通常在较小的项目并不需要,但是当涉及到更大的范围时,如企业级的应用大部分需要它了.简单的说,状态是一个包含应用程序使用的最新值的对象.但是,如果咱们从结构 ...

  3. vue中集成的ui组件库_Vue组件可使用Vault Flow通过Braintree集成PayPal付款

    vue中集成的ui组件库 Vue Braintree PayPal按钮 (Vue Braintree PayPal button) Vue component to integrate PayPal ...

  4. 有关QJ_Filecenter在vue中的使用和组件封装

    有关QJ_Filecenter在vue中的使用和组件封装 QJ_FileCenter在vue中的使用和组件封装 安装 第一步:在官网下载QJ_FileCenter安装包 第二部:访问FileCente ...

  5. vue中,右键菜单组件v-contextmenu的使用

    vue中,右键菜单组件v-contextmenu的使用 1.效果 右键菜单之禁用和子菜单 2.流程 第一步:安包 npm install v-contextmenu --save-dev npm in ...

  6. vue中pdf预览组件_Vue+ElementUI使用vue-pdf实现预览功能

    Vue + ElementUI项目中使用vue-pdf实现简单预览,供大家参考,具体内容如下 1.安装 vue-pdf npm install --save vue-pdf 2.在vue页面中导入对应 ...

  7. vue中自定义指令、组件化、生命周期、节流和防抖、获取DOM、mint-ui简介、过渡和动画

    自定义指令: vue中通过directive方法自定义指令,如:自定义一个v-focus指令: <script>Vue.directive('focus', {//通过directive( ...

  8. vue中使用FullCalendar日历组件

    官方地址:https://fullcalendar.io/ 官方vue文档(比较简洁而且是英文的):https://fullcalendar.io/docs/vue 中文文档(jquery版本)地址: ...

  9. vue中dom元素和组件的获取

    Vue中获取DOM元素 <div id="app"><input type="button" value="获取元素" @ ...

最新文章

  1. 覆盖半透明黑色CSS,通常用于弹窗提示、弹窗显示大图等情况的背景图层
  2. KD树是什么? 为什么要用KD树? KD树怎么用? KD树和KNN的关联是什么?
  3. 施密特出售Google股票套现3.27亿美元
  4. 车仪表台上的装饰_一汽大众销量最差的车,旅行车蔚领为什么在国内没有市场?...
  5. 2017.7.13 维修数列 思考记录
  6. 安卓 多条通知_【安卓+苹果】石头阅读,全网小说、漫画免费看,最好用的追书神器!...
  7. axure怎么存html文件怎么打开,axure 保存html文件怎么打开
  8. 【二维码案例】“码”出行,交通运输领域二维码应用
  9. 比风水厉害100倍的宇宙规律,你懂多少?
  10. python中difference_update_Python学习笔记-Python基础(二)
  11. HTB靶机:RainyDay
  12. 如何用命令行的形式进行仿真及do脚本的使用(仿真工具使用技巧)【Modesim/Questasim】
  13. source deactivate失败,无法退出虚拟环境
  14. (附源码)spring boot工作计划管理软件 毕业设计181638
  15. 总结 Underlay 和 Overlay 网络,在k8s集群实现underlay网络,网络组件flannel vxlan/ calico IPIP模式的网络通信流程,基于二进制实现高可用的K8S集群
  16. 3DLC系列:A/B 网格应用实践
  17. ArcGIS裁剪带有黑边的影像图两种方法
  18. [ctf.show.reverse] 来一个派森,好好学习天天向上
  19. 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想
  20. linux ps-l命令详解,ps命令实用方法.ps -l ps -L详解

热门文章

  1. 国内top5知名贵金属期货交易平台排名(最新榜单大全)
  2. NML2.0|没有经验就不能部署自己的ML模型?不存在的!
  3. vue学习第八天——组件基础
  4. 光的波函数,电磁波函数复数部分的意义是什么?
  5. java省市县联动 下拉框选择_原生JavaScript实现动态省市县三级联动下拉框菜单实例代码...
  6. BugPhobia开发篇章:绩效管理的层次优化
  7. 二手服务器做nas_用了3年群晖NAS之后,我的吐血总结!
  8. java -jar指定main方法
  9. 互联网征信接口之移动通信API接口
  10. 微信小程序简介 ,小程序项目的构成 ,小程序的Json配置文件