vue中mixin合并策略怎样理解?如何应用?
Admin 2021-10-29 群英技术资讯 1158 次浏览
这篇文章主要介绍vue中mixin合并策略的内容,下文有详细的介绍及示例可以参考,对大家学习vue框架有一定的参考价值,需要的朋友可以了解看看,希望大家阅读完这篇文章能有所收获,接下来就跟随小编学习一下吧。
我之前一直以为mixin的合并是以组件内的优先,即mixin的内容如果和组件内有冲突的,以组件内为准,确实存在这种情况,但是vue指定的策略更详细,下面分别记录各种情况对应的合并策略
基本
当一个组件使用mixin的时候,所有mixin的选项会被混入到组件自己的选项中, 这部分没什么好说的,直接看代码
// define a mixin object const myMixin = { created() { this.hello() }, methods: { hello() { console.log('hello from mixin!') } } } // define an app that uses this mixin const app = Vue.createApp({ mixins: [myMixin] }) app.mount('#mixins-basic') // => "hello from mixin!"
选项的合并策略
这里的选项指的就是 data methods和生命周期钩子函数这些选项,他们的会采取不同的合并策略
像data,methods,components,directives这样的会被合并进同一个对象中,并且遇到冲突项以组件的为准
const myMixin = { data() { return { message: 'hello', foo: 'abc' } } } const app = Vue.createApp({ mixins: [myMixin], data() { return { message: 'goodbye', bar: 'def' } }, created() { console.log(this.$data) // => { message: "goodbye", foo: "abc", bar: "def" } } })
const myMixin = { methods: { foo() { console.log('foo') }, conflicting() { console.log('from mixin') } } } const app = Vue.createApp({ mixins: [myMixin], methods: { bar() { console.log('bar') }, conflicting() { console.log('from self') } } }) const vm = app.mount('#mixins-basic') vm.foo() // => "foo" vm.bar() // => "bar" vm.conflicting() // => "from self"
而对于钩子函数就不是简单的替换了,如果有同名的,他们会被一起合并进数组中,然后依次调用,且mixin的钩子函数会率先被调用
const myMixin = { created() { console.log('mixin hook called') } } const app = Vue.createApp({ mixins: [myMixin], created() { console.log('component hook called') } }) // => "mixin hook called" // => "component hook called"
全局混入和自定义选项
const app = Vue.createApp({ myOption: 'hello!' }) // inject a handler for `myOption` custom option app.mixin({ created() { const myOption = this.$options.myOption if (myOption) { console.log(myOption) } } }) app.mount('#mixins-global') // => "hello!"
上述代码,我们在全局创建了一个自定义选项,然后进行了全局混入处理,但是需要注意的是,这会影响到这个app所有的子组件:
const app = Vue.createApp({ myOption: 'hello!' }) // inject a handler for `myOption` custom option app.mixin({ created() { const myOption = this.$options.myOption if (myOption) { console.log(myOption) } } }) // add myOption also to child component app.component('test-component', { myOption: 'hello from component!' }) app.mount('#mixins-global') // => "hello!" // => "hello from component!"
我们可以看到,对于自定义选项这不是简单的替换,而是分别调用,当然我们也可以制定我们自己的合并策略:
const app = Vue.createApp({}) app.config.optionMergeStrategies.customOption = (toVal, fromVal) => { // return mergedVal }
合并策略接收两个参数,分别是指定项在父实例和子实例的值,当使用mixin的时候我们可以查看打印什么:
const app = Vue.createApp({ custom: 'hello!' }) app.config.optionMergeStrategies.custom = (toVal, fromVal) => { console.log(fromVal, toVal) // => "goodbye!", undefined // => "hello", "goodbye!" return fromVal || toVal } app.mixin({ custom: 'goodbye!', created() { console.log(this.$options.custom) // => "hello!" } })
可以看到第一次从mixin打印,然后从app打印。
注意事项
所以官方推荐使用 Composition Api来组织逻辑
关于vue中mixin合并策略的内容就介绍到这,本文对大家学习和理解mixin合并策略有一定的帮助,大家可以了解看看。最后,希望本文能对大家有帮助,想要了解更多大家可以关注其它的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天给大家分享的是关于vue轮询的内容,本文会给大家介绍对vue轮询的理解以及实现vue轮询请求的实例,感兴趣的朋友不妨继续往下了解看看。
由于某些限制,vue2不能检测到某些情况下数组的变动,本文就将具体讲解这两种限制的解决思路
本文主要给大家解的是关于vue懒加载的三种方式,包括vue异步组件、ES6的import()和webpack的require.ensure(),下本有具体代码,具有一定的参加价值,大家可以参考。
这篇文章主要介绍了利用 JavaScript 构建命令行应用,下面文章围绕如何利用JavaScript 构建命令行应用的相关资料炸开详细内容,需要的朋友可以参考一下
这篇文章主要介绍了React+umi+typeScript创建项目的过程,结合代码介绍了项目框架搭建的方式,本文给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008