По мере того, как ваш проект становится больше, вы можете снова и снова копировать и вставлять одни и те же фрагменты кода (данные, метод, наблюдатель и т. д.) в аналогичные компоненты. Конечно, вы также можете написать эти отдельные файлы (ссылаясь на похожие компоненты) как компонент и настроить его с помощью реквизитов, но использование слишком большого количества реквизитов может легко привести к путанице. Чтобы избежать этой проблемы, большинство людей просто продолжают добавлять повторяющийся код, даже если кажется, что есть лучшее решение.
К счастью, VueJS предоставляет нам Mixins — способ повторного использования одного и того же кода в разных компонентах. Объект Mixin может использовать любые свойства компонента (данные, монтирование, создание, обновление и т. д.), и когда компонент использует миксин, вся информация миксина также будет подмешана в компонент, и компонент может получить доступ все свойства миксина.Как объявление в собственном объекте. Возьмем пример:
// mixin.js file
export default {
data () {
msg: 'Hello World'
},
created: function () {
console.log('Printing from the Mixin')
},
methods: {
displayMessage: function () {
console.log('Now printing from a mixin function')
}
}
}
// -----------------------------------------------------------
// main.js file
import mixin from './mixin.js'
new Vue({
mixins: [mixin],
created: function () {
console.log(this.$data)
this.displayMessage()
}
})
// => "Printing from the Mixin"
// => {msg: 'Hello World'}
// => "Now printing from a mixin function"
Вы можете видеть, что при использовании миксина этот компонент содержит все данные миксина и может использоваться сthisпосетить. Вы также можете определить примеси с помощью переменной вместо файла. Откровенно говоря, в этом и заключается миксин, но я чувствую необходимость понять некоторые краеугольные случаи, где он более полезен.
Что происходит, когда возникает конфликт имен?
Конфликт имен возникает, когда свойство в миксине и свойство в компоненте имеют одно и то же имя. Когда это происходит (за исключением функций жизненного цикла), свойства в компоненте будут иметь приоритет. Например, если естьtitleПеременные доступны как в компонентах, так и в миксинах -this.titleвозвращает компонентtitle. код показывает, как показано ниже:
// mixin.js file
export default {
data () {
title: 'Mixin'
}
}
// -----------------------------------------------------------
// main.js file
import mixin from './mixin.js'
export default {
mixins: [mixin],
data () {
title: 'Component'
},
created: function () {
console.log(this.title)
}
}
// => "Component"
Хорошо, почти там. . .
Конечно, о примесях Vue можно узнать еще больше, но этого достаточно, чтобы начать работу с примесями и охватить большинство вариантов использования. Если вы хотите узнать больше о продвинутых вещах (примесях), таких как глобальные примеси и стратегии слияния (примесей и компонентов), ознакомьтесь сДокументация по миксинам. Мне нравится документация Vue, я думаю, что она хорошо написана и понятна.
Добро пожаловать в Mixing!