详解Vue的mixin策略
网络编程 2021-07-04 14:07www.168986.cn编程入门
这篇文章主要介绍了Vue的mixin策略的相关资料,帮助大家更好的理解和学习vue框架,感兴趣的朋友可以了解下
我之前一直以为mixin的合并是以组件内的优先,即mixin的内容如果和组件内有冲突的,以组件内为准,确实存在这种情况,vue指定的策略更详细,狼蚁网站SEO优化分别记录各种情况对应的合并策略
基本
当一个组件使用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,ponents,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('ponent hook called') } }) // => "mixin hook called" // => "ponent 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 ponent app.ponent('test-ponent', { myOption: 'hello from ponent!' }) app.mount('#mixins-global') // => "hello!" // => "hello from ponent!"
我们可以看到,对于自定义选项这不是简单的替换,而是分别调用,我们也可以制定我们自己的合并策略
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打印。
注意事项
- mixin很容易造成冲突,你得确保不会有冲突的属性名,来避免冲突,这会造成额外的负担
- 复用性有限,因为mixin不能接受参数,所以逻辑是写定的,不灵活
所以官方推荐使用 来组织逻辑
以上就是详解Vue的mixin策略的详细内容,更多关于Vue的mixin策略的资料请关注狼蚁SEO其它相关文章!
上一篇:微信小程序实现点击导航条切换页面
下一篇:微信小程序自定义底部弹出框功能
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南