Vue中的mixin vs extends

1.mixin

注意:Vue 3中仍然支持mixins,但官方推荐使用组合式API(Composition API)作为更好的替代方案。‌‌

1.1 全局混入

混入可以进行全局注册。使用时格外小心!一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。使用恰当时,这可以用来为自定义选项注入处理逻辑。

// 为自定义的选项 'myOption' 注入一个处理器。
Vue.mixin({
  created: function () {
    var myOption = this.$options.myOption
    if (myOption) {
      console.log(myOption)
    }
  }
})

new Vue({
  myOption: 'hello!'
})
// => "hello!"

1.2 局部混入

// 定义一个混入对象
let myMixin = {
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}

// 定义一个使用混入对象的组件
let Component = Vue.extend({
  mixins: [myMixin]
})

let component = new Component() // => "hello from mixin!"

1.3 带参数混入

export default function workflowPlateModel(params) {
    const {well_distribution = ""} = params;
    const {plateType = ""} = params;
    return {
        mounted() {
            //打印布局
            console.log(well_distribution)
            //板位类型
            console.log(well_distribution)
        },
    }
}

1.4 选项合并规则

  • data
    合并型策略。若组件和mixin中都有某参数,则组件中的参数覆盖mixin中参数;
  • 钩子函数和watch
    队列型策略。都会执行,mixin中内容会先执行;
  • props 、method、inject、computed
    同名时候,使用组件内的,不使用mixin的。

一句话:组件为大!!!

2.extends

<div id="root">
    <student></student>
</div>
<script type="text/javascript">
    //创建组件
    const student = Vue.extend({
        //无el属性
        template: `
          <div><h2>你好啊!{{ name }}</h2></div>`,
        //data必须是函数式
        data() {
            return {
                name: "张三"
            }
        }
    })

    const vm = new Vue({
        el: '#root',
        components: {
            'student': student
        },
        data: {},
        created() {
           console.log(this)
        },

        mounted() {
        },
        methods: {}
    })

</script>

3.mixin vs extends

这两个很相似,都极大提高了代码复用率。

  • mixin
    主要是复用逻辑,如各种钩子,data,props,metheds,模板是不包括界面的。可以这样子说:mixin是组件中的组件,它是提取出组件与组件之中相同的那部分逻辑内容。
  • extends
    是重用组件,更像是对组件的派生,以某个组件为模板进行改造,这个模板包含html,css部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值