为什么 Mixin 被认为是有害的

为什么 Mixin 被认为是有害的

Mixin 是在 Vue 2 中引入的,作为组件之间共享代码的解决方案,这种方式成为许多代码库不可或缺的一部分。然而,随着时间的推移,它们的使用开始出现问题。尽管 mixins 最初很有吸引力,但现在许多开发人员认为它是有害的。在本文中,我们将探讨Mixin的缺点和更好的共享代码的方法。

缺点

复杂

Mixin 可以向组件添加过多的逻辑,使其变得更加复杂且难以理解,从而导致意想不到的后果和维护困难。例如,如果一个组件有多个 mixin,每个 mixin 都有自己的属性和方法,那么该组件将有很多逻辑,并且很难确定每个属性和方法如何影响组件的行为。由于混入而导致组件过于复杂,使得扩展或调试变得具有挑战性。

为了避免这种情况,明智地选择 mixins 并确保它们简化而不是使得组件的逻辑复杂化至关重要。Mixin 会给组件带来偶然和本质的复杂性。偶然复杂性是指在不影响功能的情况下可以消除的不必要的复杂性,而本质复杂性是解决问题所固有的,无法避免。使用 mixins 时考虑这两种类型的复杂性非常重要。

命名冲突和模糊的合并策略

Mixin 可能与组件具有重叠的属性,从而导致命名冲突和意外行为。

比如说我们有一个包含特定员工逻辑的mixin,其中包括声明增值税金额。

// mixins/employee.js
export default {data() {return {vat: 20};},computed: {calculateSalary() {return this.baseSalary - (this.baseSalary * this.vat) / 100;}}
};

以及还声明了增值税金额的薪资显示组件:

<template><div id="app">工资: {{ calculateSalary }}</div>
</template><script>
import employee from "./mixins/employee.js";export default {name: "App",mixins: [employee],data() {return {baseSalary: 100000,vat: 30,};},
};
</script>

在这种情况下,计算函数里声明的增值税金额(vat)将被忽略,并且在具有更复杂逻辑的现实示例中,这很难发现,并且如果我们对 mixin 进行隔离单元测试,可能会得到误报。

当两个不同 mixins 之间的命名冲突时,这可能会更加令人困惑。在这种情况下,最后声明的一个会覆盖另一个!

可重用性降低

Mixins 使得重用组件变得更加困难,因为它们增加了组件的依赖性并使其与特定功能的耦合更加紧密。

例如,想象一个使用 mixin 的组件,该 mixin 为该组件提供了特定的样式。如果另一个组件也想使用相同的样式,则它必须使用相同的 mixin。这意味着组件的样式与现在的 mixin 紧密耦合,并且如果不使用 mixin 则无法重用。

这使得组件的可重用性降低,因为如果不包含 mixin 及其依赖项,它就无法在应用程序的其他部分中使用。这可能会导致代码重复并使应用程序更难以维护。

解决方案

组合式api

组合式api 是 Vue 3 的亮点。主要优点是以可组合函数的形式实现干净、高效的逻辑重用。它解决了 mixin 的缺点。社区里有非常多使用该方式的项目,例如VueUse。此外,它还是一种干净的机制,可以轻松地将有状态的第三方服务或库集成到 Vue 的响应性系统中,例如不可变数据、状态机和RxJS。

前面提到了使用 mixin 会创建高度耦合且难以扩展或维护的代码:

在这里插入图片描述
另一种方法是让每个组件显式导入其所有依赖项。这样,一切都是透明的并且易于推理。设计上消除了命名冲突,并且测试也更加简单。

在这里插入图片描述
实际上,Composition API 是一组实用帮助程序,使我们能够使用显式导入的函数而不是声明选项来编写组件。它是一个涵盖以下 API 的总称:

  • Reactivity API(响应式api):例如ref()reactive(),它允许我们直接创建反应状态、计算状态和观察者。
  • Lifecycle Hooks(生命周期钩子):例如onMounted()onUnmounted(),它允许我们以编程方式挂钩到组件生命周期。
  • 依赖注入,即provide()inject(),它允许我们在使用 Reactivity API 时利用 Vue 的依赖注入系统。

简单示例:

// mouse.js
import { ref, onMounted, onUnmounted } from 'vue'export function useMouse() {const x = ref(0)const y = ref(0)function update(event) {x.value = event.pageXy.value = event.pageY}onMounted(() => window.addEventListener('mousemove', update))onUnmounted(() => window.removeEventListener('mousemove', update))return { x, y }
}
<script setup>
import { useMouse } from './mouse.js'const { x, y } = useMouse()
</script><template>鼠标位置: {{ x }}, {{ y }}</template>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380976.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【从零开始学习JAVA | 第四十五篇】反射

目录 前言&#xff1a; ​反射&#xff1a; 使用反射的步骤&#xff1a; 1.获取阶段&#xff1a; 2.使用阶段&#xff1a; 反射的应用场景&#xff1a; 使用反射的优缺点&#xff1a; 总结&#xff1a; 前言&#xff1a; Java中的反射是一项强大而灵活的功能&#xff0…

1688采源宝的商家靠谱吗 怎么入驻成为阿里采源宝商家

说到采源宝&#xff0c;我想很多微商都是不陌生的&#xff0c;采源宝的主要作用就是方便微商查看并转发供应商所发布的商品&#xff0c;并在有客户下单时&#xff0c;还可以轻松向供货商去下单。但也有很多朋友对采源宝的商家靠谱吗这个问题存在很大疑惑&#xff0c;下面我们就…

开发nft数字藏品平台合法合规吗?

开发nft数字产品平台合法合规吗&#xff1f;这是很多人都在问的问题&#xff0c;那么今天就来给大家说说。 开发nft数字产品平台可以肯定的是合法合规。 其实很多人对国内国外的玩法不太了解&#xff0c;有很多人对数字产品法律和政策不太清楚。首先&#xff0c;我们要了解国内…

最近发现一款拍卖转拍,玩家互动挑选自己想要的拍品,转拍获利,还可以提货的源码,一款购物和赚钱的不二选择

拍卖转拍,玩家互动挑选自己想要的拍品,转拍获利,还可以提货,一款购物和赚钱的不二选择操作步骤打开拍卖首页 根据时间点击进入指定的场次选作品&#xff0c; 等待到时间准备抢拍, 抢完之后可以查看卖家的收款码, 确认打款之后可以上传支付截图 然后可以等待卖家确认收货, …

1688按图搜索商品(拍立淘)获取数据的教程

onebound.1688.item_search_img 获取key和secret API文档说明 完整返回数据 "items": { "real_total_results": 80, "error": "", "item": [ { "title"…

基于java SSM框架的竞拍系统拍卖网设计

今天给大家介绍一个竞拍网的设计与实现。 本项目主要实现的功能是为广大的消费者群体与商家之间提供网络交易的平台&#xff0c;实现该平台的创建需要实现一系列的功能。 商品信息发布的功能&#xff0c;商家发布自己产品的相关信息&#xff1b;注册登录功能&#xff0c;游客通…

Java基于ssm开发的古董竞标拍卖系统也可以改成拍卖品网站

简介 古董展品拍卖网站 用户可以注册成为买家也可以申请开店成为卖家&#xff0c;发布古董展品&#xff0c;设置拍卖起止时间进行展品的拍卖。如果早于拍卖开始时间或者晚于拍卖结束时间&#xff0c;则不可以竞拍。多人竞拍&#xff0c;买家可以根据最高价设置谁中标&#xff…

星球日报|Conflux支持 阿里上线国内最大数字藏品交易撮合平台

转载自Odaily星球日报 近日&#xff0c;阿里拍卖在淘宝 APP 首屏重要入口位置上线了一大批第三方公链以及平台支持的数字藏品店铺&#xff0c;以供用户进行拍卖交易。除由公链 Conflux 支持的数字藏品外&#xff0c;阿里拍卖同时存在由国产联盟链“知信链”和“新版链”技术支持…

带有反爬虫机制下进行爬取数据方案,这里以阿里拍卖为例

介绍 最近接到一个2万多的小项目,需求是这样的。需要将一个大型网站上的数据爬下来保存到本地。具体项目不方便透漏,这里的演示就以阿里拍卖网站为例。 反爬虫机制有那些? 解决反爬虫之前,我们首先得了解反爬虫机制。 ip限制反爬虫:免登录反爬虫一般用访问ip来判断你是…

SSM框架在线拍卖系统项目

文章目录 前言一、项目设计具体任务和要求二、数据库设计三、页面效果及功能展示1. 拍卖系统登录页面2.拍卖系统注册页面3.拍卖系统登录后主页面4.拍卖系统游客浏览拍卖商品页面5.拍卖系统用户添加拍卖商品页面6.拍卖系统用户查看个人上传商品页面7.拍卖系统用户删除个人商品页…

类似京东淘宝寄售转拍系统源码-拍卖系统源码-竞拍系统网站源码

古玩文物字画寄售转拍系统源码-拍卖系统源码-竞拍系统网站源码(经检查代码不加密&#xff0c;可二进行二开)&#xff0c;拍卖转拍,玩家互动挑选自己想要的拍品,转拍获利,还可以提货,一款购物和赚钱的不二选择操作步骤打开拍卖首页 根据时间点击进入指定的场次选作品&#xff0…

基于 CentOS 7 构建 LVS-DR 群集 配置nginx负载均衡

环境配置&#xff1a; RHCE客户机192.168.100.146node1lvs192.168.100.145node2RS192.168.100.147node3RS192.168.100.148 配置ipvsadm httpd&#xff1a; [rootnode1 ~]# yum install ipvsadm.x86_64 [rootnode2 ~]# yum install http -y [rootnode2 ~]# systemctl …

通过淘宝司法拍卖购买房子,需要注意些什么?

&#xfeff;&#xfeff; https://www.zhihu.com/question/29996231 通过淘宝司法拍卖购买房子&#xff0c;需要注意些什么&#xff1f; 最近在淘宝网上看到司法拍卖的一套房子&#xff0c;地理位置&#xff0c;房屋质量都比较合适&#xff01;关键是价格比市场价低三四十万…

百度竞价托管靠谱吗

很多客户在找百度竞价托管公司时&#xff0c;往往会有一些疑虑&#xff0c;我花了钱&#xff0c;让别人来优化推广账户&#xff0c;会不会不靠谱呢&#xff1f;这个钱白花了怎么办&#xff1f;就算不是钱的问题&#xff0c;耽误我的事儿啊&#xff0c;耽误公司业绩呀。敖游想说…

使用Jsoup技术获取`阿里拍卖`中法院拍卖的所有拍卖品

文章目录 前言最终效果效果演示爬取所有记录根据条件爬取 项目仓库 项目前准备技术选型开发工具用到的jar包 爬取所有数据页面分析第一步&#xff1a;获取所有省份列表 代码实现进入主页解析页面获得所有省的文档模型循环&#xff0c;获取各省的信息获得市列表获得总页数和翻页…

阿里资产 法拍逆向 sign加密 爬虫

阿里法拍仅仅只需要解决sign值加密即可。 sign 全局搜素sign:,进行多处断点&#xff0c;刷新页面&#xff0c;可以发现sign加密参数以及加密方法。 有经验的可以看出sign值是进行md5加密&#xff0c;可以使用js或python模拟加密&#xff0c;也可以直接将p函数扣下来。 加密参数…

阿里拍卖全链路导购策略首次揭秘

拍卖&#xff0c;是一个大家熟悉的词汇&#xff0c;但对在线拍卖以及在线拍卖的个性化推荐&#xff0c;大家可能不那么熟悉。本文将对阿里拍卖业务背景先做介绍&#xff0c;进而描述业务中的浅库存约束及拍品冷启动问题&#xff0c;并分别提出经线上AB实验验证的解法&#xff0…

拍卖网站开发新风潮?阿里的拍卖平台正在这么做

如今&#xff0c;线上拍卖成为新的风潮、司法拍卖火爆&#xff0c;网络拍卖将成为下一个电商市场&#xff0c;拍卖网站开发新风潮。 学霸的高分笔记值多少钱?1897年的可口可乐运货单你感兴趣吗?井柏然写的三行情书怎么卖?一个大学生把他的脑门当作广告位&#xff0c;你会出价…

WebMagic抓取阿里司法拍卖信息

1、 引入pom文件 <!--webmagic网络爬虫--><dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version></dependency><dependency><groupId>us.codecraft…

csdn添加自定义栏目,公众号二维码等

准备好要添加的公众号二维码&#xff0c;如博主左边的栏目的二维码通过写博客里的图片上传将公众号二维码上传到csdn&#xff0c;将图片地址复制下来&#xff08;只需域名和路径名即可&#xff0c;不要&#xff1f;后面的各种参数&#xff09;在博客管理 -> 栏目管理 -> …