温故而知新(01)------数据混入

前言

数据混入------mixin,混入一般分为局部混入和全局混入。混入的选项是常见的api,比如data,created mounted....

定义基础文件mixin1.js

mixin1.js

javascript 复制代码
export const mix1 = {
    data() {
        return{
            name: '昨日晴天'
        }
    },
    methods:{

    },
    created() {
        console.log(111)
    }
}

export const mix2 = {
    data(){
        return{
          age:2
        }
    },
    methods:{

    },
    created() {
        console.log(2222)
    }

}

全局的引入方式如下:

javascript 复制代码
import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

import {mix2} from "@/mixin1";

new Vue({
  render: h => h(App),
  mixins:[mix2]
}).$mount('#app')

打开控制台如下:

这里是混入了全局的created,如果是在我们的app.vue加入了created之后结果是这样的:

xml 复制代码
<script>
import HelloWorld from './components/HelloWorld.vue'
import {mix1} from "@/mixin1";
export default {
  name: 'App',
  mixins:[mix1],
  components: {
    HelloWorld
  },
  created() {
    console.log('组建内的created')
  }
}
</script>

控制台输出如下:

这里我们可以看出,无论是组建内部的created的还是混入的created都已经有打印出来,而且顺序还是先是全局的,后是局部的。

xml 复制代码
<script>
import HelloWorld from './components/HelloWorld.vue'
import {mix1} from "@/mixin1";
export default {
  name: 'App',
  mixins:[mix1],
  components: {
    HelloWorld
  },
  created() {
    console.log('组建内的created');
    console.log("如果存在混入的函数,先执行全局的混入,再执行局部的混入函数,最后执行内的函数")
  }
}
</script>

打印如下:

所以我们得出一个结论:

如果存在混入的函数,先执行全局的混入,再执行局部的混入函数,最后执行内的函数

data中的变量名冲突混入

我们mixin1.js中有name,app中我们也加入一个name,这时候就会有一个冲突

javascript 复制代码
export const mix1 = {
    data() {
        return{
            name: '昨日晴天'
        }
    },
    methods:{

    },
    created() {
        console.log(111)
    }
}
xml 复制代码
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <p>{{name}}</p>
    <HelloWorld msg="Welcome to Your Vue.js App" v-if="false"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'
import {mix1} from "@/mixin1";
export default {
  name: 'App',
  mixins:[mix1],
  components: {
    HelloWorld
  },
  data(){
    return{
      name:'今天下雨了'
    }
  },
  created() {
    console.log('组建内的created');
    console.log("如果存在混入的函数,先执行全局的混入,再执行局部的混入函数,最后执行内的函数")
  }
}
</script>

打印结果如下:

是的,如果在存在冲突的情况下,组件的优先级是大于混入的。

对于函数也是如此:

比如下面的例子,函数getColor:

javascript 复制代码
export const mix2 = {
    data(){
        return{
          age:2
        }
    },
    methods:{
         getColor(){
             return '全局颜色'
         }
    },
    created() {
        console.log(2222)
    }

}
xml 复制代码
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <p>{{name}}</p>
    {{getColor()}}
    <HelloWorld msg="Welcome to Your Vue.js App" v-if="false"/>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'
import {mix1} from "@/mixin1";
export default {
  name: 'App',
  mixins:[mix1],
  components: {
    HelloWorld
  },
  data(){
    return{
      name:'今天下雨了'
    }
  },
  methods: {
    getColor() {
      return '组件函数颜色'
    }
  },
  created() {
    console.log('组建内的created');
    console.log("如果存在混入的函数,先执行全局的混入,再执行局部的混入函数,最后执行内的函数")
  }
}
</script>

打印结果如下:

Vue的混入各有好坏

优点:

1.提高代码复用性

2.维护方便,只需要修改一个地方

3.无需传递状态

缺点:

1.不清晰的数据来源,不好追溯源

2.不同的开发者使用混入,会存在命名空间冲突

3.乱用的话后期不好维护

相关推荐
崔庆才丨静觅14 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606115 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了15 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅15 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅16 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅16 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment16 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅16 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊16 小时前
jwt介绍
前端
爱敲代码的小鱼17 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax