vue中hooks与minxins的区别

一、 mixin (Vue2)

mixin可以把多个组件共用的配置提取成一个换入对象

export const mixin_name = {
    methods:{
        showName(){
            alert(this.name)
        }
    },
}

引用minxins

<template>
    <div>
        <h2 @click="showName">学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
</template>

<script>
	import {mixin_name} from '../mixin'
    export default{
        name:'school',
        data(){
            return {
                name: 'xxx'
                address:'xxxx'
            }
        },
        //引入后上方的ShowName就可以正常使用了
        mixins:[mixin_name]
    }
</script>

注意事项:

  • mixins中的生命周期会与引入mixins的组件的生命周期整合在一起调用
  • 组件的data、methods、filters会覆盖mixins里的同名data、methods、filters

二、hook (vue3)

hook本质是一个函数,将setup函数中使用的Composition API进行封装,类似于Vue2中的mixin

//实现监控鼠标移动坐标的功能
import {reactive,onMounted,onBeforeUnmount} from 'vue'
export default function(){
   let point = reactive({
       x:0,
       y:0
   })
   
   function savePoint(event){
       point.x = event.pageX
       point.y = event.pageY
       console.log(event.pageX,event.pageY)
   }
   
   onMounted(()=>{
       window.addEventListener('click',savePoint)
   })
   
   onBeforeUnmount(()=>{
       window.removeEventListener('click',savePoint)
   })
   
   return point
}

引用hooks

<template>
    <h2>当前点击时鼠标坐标为x:{{point.x}},y:{{point.y}}</h2>
</template>

<script>
	import {ref} from 'vue'
    import usePoint from '../hooks/usePoint'
    export default{
        name:'Demo',
        setup(){
            const point = usePoint()
        }
    }
</script>

三、 mixin和hook的对比

mixin相比hook的缺点:
变量来源不明确(隐式传入),不利于阅读,使代码变得难以维护
mixin中的变量和方法都是直接插入组件中的,不需要显式的调用,这样就会很难分清到底调用的是哪个mixin中的哪个方法
同名属性、同名方法无法融合,可能会导致冲突
minxin之间的同名属性、同名方法会导致冲突,也有可能相互覆盖输出结果,加上组件会覆盖mixin的同名方法和变量,乱上加乱
mixin和组件可能出现多对多的关系,复杂度较高
一个mixin可能对应多个组件,一个组件也可以使用多个mixin
hook的优点
hook是一个函数,mixin是一个对象
hook就是拆分版的mixin,将导入操作交给开发者,能够清楚地溯源每个属性和方法
minxin和hook的使用与对比
1. mixin (Vue2)
2. hook (Vue3)
3. mixin和hook的对比
Mixins 是vue2的用法,通过对象的方式进行定义和应用,在组件中的属性和方法会与组件本身的属性和方法进行合并,可能会导致命名冲突或不可预料的行为。
Hooks 是vue3的用法,使用函数的方式定义和使用,可以将相关的逻辑和状态封装为自定义的 Hook 函数,相对来说更安全

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值