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

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

时间2025-07-29 06:40:37分类IT科技浏览5015
导读:一、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
cf一键领取活动软件(有没有可以一键领取CF装备的软件_2023一键领取CF装备教程) 找不到zlib.dll(win7系统zlib1.dll丢失的解决方法)