美文网首页
vue Mixin混入

vue Mixin混入

作者: 啵崽崽 | 来源:发表于2022-08-29 15:45 被阅读0次
什么是混入

官方:


官方

大白话:
将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部。

Mixin和vuex的区别

Vuex公共状态管理,如果在一个组件中更改了Vuex中的某个数据,那么其它所有引用了Vuex中该数据的组件也会跟着变化。
Mixin中的数据和方法都是独立的,组件之间使用后是互相不影响的。

定义混入

在src下新建mixin文件夹(文件夹名自取),再新建一个文件.js(文件名自取)

export const mixins = {
  data() {
    return {};
  },
  computed: {},
  created() {},
  mounted() {},
  methods: {},
}

// 或者
export default {
  data() {
    return {};
  },
  computed: {},
  created() {},
  mounted() {},
  methods: {},
}
// 带default引入default  import myMixins from './mixin/myMixin'

混入导出的其实就是一个对象

局部混入

在组件中局部混入使用的是:mixins:['']

APP.vue

<template>
    <div id="app">
      <h1>{{ myMiXinText}}</h1>
    </div>
</template>

<script>
import { myMixins } from './mixin/myMixin'
export default {
  data() {
    return {
    }
  },
  mixins: [myMixins]
}
</script>

myMixin.js

export const myMixins = {
    data() {
      return {
        myMiXinText: '我是局部混入'
      }
    }
}
局部混入效果
全局混入

APP.vue

<template>
    <div id="app">
      <h1>{{ myMiXinText}}</h1>
    </div>
</template>

main.js

import { myMixins } from "./mixin/myMixin"
Vue.mixin(myMixins)
全局混入效果
混入与组件的加载顺序

组件:

<template>
    <div id="app"></div>
</template>

<script>
import { myMixins } from './mixin/myMixin'
export default {
  data() {
    return {
    }
  },
  mixins: [myMixins],
  mounted() {
    console.log('我是组件的mounted')
  },
  created() {
    console.log('我是组件的created')
  }
}
</script>

混入:

export const myMixins = {
    data() {
      return {}
    },
    mounted() {
        console.log('我是混入的mounted')
    },
    created() {
        console.log('我是混入的created')
    }
}
image.png

生命周期函数合并后执行顺序:先执行mixin中的,后执行组件的。

混入与组件的命名冲突

组件定义的data字段和方法要高于mixin混入的
组件:

<template>
    <div id="app">
      <h1>{{myMiXinText}}</h1>
      <button @click="myBtn">点击</button>
    </div>
</template>

<script>
import { myMixins } from './mixin/myMixin'
export default {
  data() {
    return {
      myMiXinText:'我是组件data的字段'
    }
  },
  methods: {
      myBtn() {
        console.log('组件中的点击')
      }
  },
  mixins: [myMixins]
}
</script>

mixin混入:

export const myMixins = {
    data() {
      return {
        myMiXinText: '我是混入字段'
      }
    },
    methods: {
        myBtn() {
            console.log('混入中的点击')
        }
    }
}
image.png
组件改动了mixin中的数据,另一个引用了mixin的组件会受影响吗?

组件A

<template>
    <div id="app">
      <div>我是组件A---mixin中的数据:{{myMiXinText}}</div>
      <hr/>
      <!-- 组件B -->
      <homePage></homePage>
      <hr/>
      <button @click="handleChange">更改mixin数据</button>
    </div>
</template>

<script>
import { myMixins } from './mixin/myMixin'
import homePage from './components/homePage.vue'

export default {
  data() {
    return {
    }
  },
  components: {
    homePage
  },
  mixins: [myMixins],
  methods: {
    handleChange() {
      this.myMiXinText = '修改组件A'
      console.log('"更改后的值', this.myMiXinText)
    }
  }
}
</script>

组件B

<template>
    <div id="homePage">
        我是组件B---mixin中的数据:{{ myMiXinText }}
    </div>
</template>

<script>
import { myMixins } from '../mixin/myMixin'
export default {
  data() {
    return {}
  },
  mixins: [myMixins]
}
</script>

myMixin.js:

export const myMixins = {
    data() {
      return {
        myMiXinText: '我是哈哈'
      }
    }
}
image.png
效果

Mixin中的数据和方法都是独立的,组件之间互相不影响

混入的优缺点

优点:
提高代码复用性
无需传递状态
维护方便,只需要修改一个地方即可
缺点:
命名冲突
滥用的话后期很难维护
不好追溯源,排查问题稍显麻烦
不能轻易的重复代码

总结

1、mixin中的生命周期函数会和组件的生命周期函数一起合并执行,合并后执行顺序:先执行mixin中的,后执行组件的
2、mixin中的data数据在组件中也可以使用
3、mixin中的方法在组件内部可以直接调用
4、Mixin中的数据和方法都是独立的,组件之间互相不影响
5、组件定义的data字段和方法要高于mixin混入的

相关文章

  • vue 组件的理解

    Vue.mixin 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对...

  • vue混入mixin

    Vue.mixin 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对...

  • vue mixin

    混入 mixin 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象...

  • vue mixin(混入)

    目的 增强组件功能的可复用性,一个混入对象可以包含任意组件选项

  • vue混入mixin

    mixin主要作用是提取组件中相同的代码,对生命周期、methods、components、data都可以做提取,...

  • Vue混入(mixin)

    理解:一个混入对象可以包含任意组件选项,这些选项将混入到组件本身的选项;作用:用来分发Vue组件中的可服用功能; ...

  • vue 混入 (mixin)

    何为混入? 混入类似于“继承”,当前组件对象继承于组件对象,一般情况下遵循“就近原则”。但是与继承不同的是,继承一...

  • vue - mixin混入

    1. mixin概念 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入...

  • Vue mixin 混入

    混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选...

  • Vue 之 混入(mixins)

    Vue 之 混入(mixins) 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功...

网友评论

      本文标题:vue Mixin混入

      本文链接:https://www.haomeiwen.com/subject/sqblnrtx.html