首页 > 其他分享 >Vue3笔记 - minxin和hook的使用与对比

Vue3笔记 - minxin和hook的使用与对比

时间:2022-11-22 02:11:35浏览次数:44  
标签:name point Vue3 hook mixin minxin 组件

minxin和hook的使用与对比

目录

1. mixin (Vue2)

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

  • show.js文件(mixin)

    export const mixin_name = {
        methods:{
            showName(){
                alert(this.name)
            }
        },
    }
    
  • School.js文件(引用mixin)

    <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

2. hook (Vue3)

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

  • usePoint.js文件(hook)

    //实现监控鼠标移动坐标的功能
    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
    }
    

    Demo.js(引用hook)

    <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>
    

3. mixin和hook的对比

  • mixin相比hook的缺点

    • 变量来源不明确(隐式传入),不利于阅读,使代码变得难以维护

      mixin中的变量和方法都是直接插入组件中的,不需要显式的调用,这样就会很难分清到底调用的是哪个mixin中的哪个方法

    • 同名属性、同名方法无法融合,可能会导致冲突

      minxin之间的同名属性、同名方法会导致冲突,也有可能相互覆盖输出结果,加上组件会覆盖mixin的同名方法和变量,乱上加乱

    • mixin和组件可能出现多对多的关系,复杂度较高

      一个mixin可能对应多个组件,一个组件也可以使用多个mixin

  • hook的优点

    • hook是一个函数,mixin是一个对象
    • hook就是拆分版的mixin,将导入操作交给开发者,能够清楚地溯源每个属性和方法

标签:name,point,Vue3,hook,mixin,minxin,组件
From: https://www.cnblogs.com/Solitary-Rhyme/p/16913955.html

相关文章

  • vue3 路由的使用
    添加一个router.js配置文件import{createRouter,createWebHistory}from'vue-router'createRouter:用来创建路由createWebHistory:url的格式不带#。导入你......
  • Vue3笔记 - Vue3中的计算属性、监视属性和watchEffect函数
    计算属性与监视属性目录计算属性与监视属性1.计算属性2.监视属性3.watchEffect函数1.计算属性Vue3中的计算属性仅在书写方式上与Vue2略有不同,功能上基本一致Vue2......
  • vue3的父子通信
    父组件import{students,studentDel}from"@/api/api.js";//eslint-disable-next-lineno-unused-varsimport{ref,reactive,toRefs,onMounted,useContext,c......
  • Vue3官方出的Playground你都用了吗?没有没关系,直接原理讲给你听
    相比​​Vue2​​​,​​Vue3​​​的官方文档中新增了一个在线​​Playground​​:打开是这样的:相当于让你可以在线编写和运行​​Vue​​​单文件组件,当然这个东西也是开源......
  • vue3.0之ref函数
    1、ref推荐定义基本数据类型(ref值也可以是对象,但是一般情况下是对象直接使用reactive更合理)。2、在 vue 的模板中使用ref的值不需要通过value获取(vue 会通过自动......
  • vue3中的v-model
    V-model具体的变化内容:-组件上单个v-model:属性以及事件的默认名称变了-组件上单个v-model别名:v-bind的.sync修饰符和组件的model......
  • 【Vue3】给整个网页背景document添加单击click事件
    给整个网页背景document添加单击click事件,解决下拉菜单隐藏问题onMounted(()=>{//document.addEventListener('click',function(){alert('body1')})documen......
  • vue3+vant移动端适配 px转换rem
    Vant中的样式默认使用px作为单位,如果需要使用rem单位,推荐使用以下两个工具:postcss-pxtorem是一款postcss插件,用于将px单位转化为remlib-flexible用于设置re......
  • Vue3 reactive 之源码的实现
    Reflect.get()方法与从对象(target[propertyKey])中读取属性类似,但它是通过一个函数执行来操作的。exportconstreactive=<Textendsobject>(target:T)=>{......
  • Vue3组件Props属性名不能与Setup()中变量名不可重复
    npmrunlint,显示错误点:30:9   error Gettingavaluefromthe`props`inrootscopeof`setup()`willcausethevaluetolosereactivity vue/no-setup-pr......