首页IT科技vue3的ref和reactive的区别(Vue3:探讨一下mixin)

vue3的ref和reactive的区别(Vue3:探讨一下mixin)

时间2025-09-17 12:23:09分类IT科技浏览5567
导读:一、Vue2中的mixin 1、定义要混入的数据对象...

一                、Vue2中的mixin

1                        、定义要混入的数据对象

// 定义一个 mixin 对象 export const myMixin = { created() { this.hello() }, methods: { hello() { console.log(hello from mixin!) } } }

2        、在需要这些东西的地方去通过mixins获得mixin对象

<template> <div> <h1>我是页面1</h1> <h2>hello:{{ hello }}</h2> </div> </template> <script> import { myMixin } from @/mixin/test1.js export default { mixins: [myMixin], } </script> <style></style>

3                、解决的问题(说作用可能更准确点)

vue2.x中                ,mixin是将部分组件逻辑抽象成可重用块的工具                        ,也就是重要的“复用                ”

4                        、存在的问题

mixin很容易发生冲突:因为mixin中的property都被合并到了一个组件中        ,同名的会被覆盖        ,需要了解每一个选项默认的合并特性

数据来源不明确:如果你引入了多个mixin对象                        ,那你想要知道其中一个具体方法        、属性等的来源无疑是很难查找的

可重用性有限:我们只能被动的使用mixin中传递的任何东西                ,而不能通过参数传递的方式来改变其中的某些逻辑        ,这大大降低了它抽象逻辑方面的灵活性

5        、vue2中mixin详解

请参考:Vue混入mixin_你吃香蕉吗?的博客-CSDN博客

二                        、Vue3中有mixin吗?需要mixin吗?

1                、结论:vue3中没有mixin                        ,也不需要mixin

2        、vue3中没有mixin?

如果大家在这之前看过vue3的官方文档                ,那么大家就会发现,在vue3的文档中提到mixin的地方极少无比                        ,所能找到的地方也只是在说vue2的一些写法之类的                        ,那既然没写mixin,大概率就在vue3中没有mixin了                ,接下来我们会肯定它没有mixin                。

官方很重要的一段话:为了解决Vue2存在的问题                        ,我们添加了一种通过逻辑关注点组织代码的新方法:组合式 API                        。

3                        、vue3不需要mixin?

vue3相比较vue2来说        ,它更加的接近函数式编程                ,说白了就是写js                        ,用写js的方式方法来写页面

提到这里我想大家应该能够想到一个关键词:公共

而上面所说也就是组合式API——Composition API

在Composition API中        ,我们可以抽离出每一个逻辑点为单独的js文件        ,再通过import的方式去把页面的所有内容组合在一起                        ,实现一个完整的页面        。

同样的                ,如果多个页面                、组件        ,用到的方法、变量都是同样的                        ,那么我们可以把这一个js文件同时引入到多个文件中                ,然后再进行使用,这也就达到了mixin的效果                        ,甚至我们可以通过接受参数的方式对公共的方法作出定制化处理

三                        、Vue3中“Mixin                        ”的实践

1                        、目录结构

 2、index.vue

<template> <A></A> <B></B> </template> <script setup lang="ts"> import A from ./A.vue import B from ./B.vue </script>

3                、homeMixin.ts

export default function getHomeMixin(source: string) { let name = ref<string>(张三); const componentName = source const handleChangeName = (transmitName: string) => { name.value = transmitName } return { name, componentName, handleChangeName } }

4                        、A        、B组件

A组件

<template> <div class="A"> <p>A组件</p> <p>minxin:{{ Mixin.name }}</p> <p>{{ Mixin.componentName }}</p> <el-button @click="Mixin.handleChangeName(法外狂徒-张三)">A组件改变mixin中得到的数据</el-button> </div> </template> <script setup lang="ts"> import getHomeMixin from ./homeMixin const Mixin = getHomeMixin(我是A组件传的值); </script> <style lang="less" scoped> .A { width: 300px; height: 300px; background-color: aquamarine; } </style>

B组件

<template> <div class="B"> <p>B组件</p> <p>minxin:{{ Mixin.name }}</p> <p>{{ Mixin.componentName }}</p> <el-button @click="Mixin.handleChangeName(尼古拉斯-赵四)">B组件改变mixin中得到的数据</el-button> </div> </template> <script setup lang="ts"> import getHomeMixin from ./homeMixin const Mixin = getHomeMixin(我是B组件传的值); </script> <style lang="less" scoped> .B { width: 300px; height: 300px; background-color: burlywood; } </style>

5                、效果

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
科大讯飞语音引擎3.0怎么卸载(vue3+vite+ts项目集成科大讯飞语音识别(项目搭建过程以及踩坑记录)) 手写数字识别数据库是什么(【Tensorflow深度学习】实现手写字体识别、预测实战(附源码和数据集 超详细))