Экземпляр компонента Vue
В Vue.js экземпляр компонента является одним из самых фундаментальных строительных блоков приложения Vue. Каждый экземпляр компонента — это компонент Vue, который имеет собственный шаблон, данные, методы и хуки жизненного цикла и может независимо управлять своим состоянием и поведением. Ниже приведено подробное введение в экземпляры компонентов Vue:
Создание экземпляра компонента Vue
В Vue.js экземпляр компонента обычно создаётся с помощью метода createApp и объекта параметров компонента.
Объект параметров компонента может содержать следующие свойства:
data: Объект данных, используемый для хранения реактивных данных компонента.props: Массив или объект props, используемый для получения данных, переданных от родительского компонента.computed: Объект вычисляемых свойств, динамически рассчитываемых на основе реактивных зависимостей.methods: Объект методов, содержащий функции и операции внутри компонента.watch: Объект наблюдателей, используемый для отслеживания изменений данных и соответствующего реагирования.template: Строка, определяющая структуру шаблона компонента.render: Функция, используемая для рендеринга виртуального DOM компонента.setup: Функция, используемая для настройки начального состояния компонента, данных, вычисляемых свойств и наблюдателей (в Vue 3).
Ниже приведён пример простого экземпляра компонента Vue:
Пример
const app = createApp({
data() {
return {
message: 'Hello, Vue!'
};
},
methods: {
greet() {
alert(this.message);
}
},
template: `
<div>
<p>{{ message }}</p>
<button @click="greet">Greet</button>
</div>
`
});
app.mount('#app');
Пояснение:
dataФункция возвращает объект, содержащийmessageсвойство, используемое для хранения состояния компонента.methodsОбъект содержитgreetметод; при нажатии кнопки появляется диалоговое окно, отображающееmessageсодержимое.templateСтрока определяет структуру шаблона компонента, используя интерполяцию и привязку событий для отображения данных и взаимодействия.
Хуки жизненного цикла
Экземпляры компонентов Vue имеют функции-хуки жизненного цикла, которые позволяют разработчикам выполнять пользовательскую логику на разных этапах жизненного цикла компонента. Распространённые хуки жизненного цикла включаютcreated、mounted、updatedиdestroyedи т. д.
Пример
data() {
return {
message: 'Hello, Vue!'
};
},
created() {
console.log('Компонент создан');
},
mounted() {
console.log('Component mounted');
},
updated() {
console.log('Компонент обновлён');
},
destroyed() {
console.log('Компонент уничтожен');
},
template: `
<div>
<p>{{ message }}</p>
</div>
`
});
Взаимодействие компонентов
Экземпляры компонентов Vue взаимодействуют друг с другом через props, events, provide/inject, $parent/$children, $attrs/$listeners и другие методы, в зависимости от отношений между компонентами и их требований. Эти механизмы позволяют компонентам передавать данные между разными уровнями и реагировать на действия пользователя.
Свойства экземпляра компонента
$data
Свойство $data содержит все свойства данных экземпляра компонента. Оно реактивно, то есть при изменении данных связанные представления автоматически обновляются.
Пример
data() {
return {
message: 'Hello, Vue!'
};
}
});
const vm = app.mount('#app');
console.log(vm.$data); // { message: 'Hello, Vue!' }
$props
Свойство $props содержит все props, переданные из родительского компонента, которые получает текущий компонент. Оно доступно только для чтения.
Пример
<template>
<child-component :message="parentMessage"></child-component>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
data() {
return {
parentMessage: 'Сообщение от родителя'
};
}
};
</script>
Пример
export default {
props: ['message'],
mounted() {
console.log(this.$props.message); // 'Сообщение от родителя'
}
};
$refs
$refs содержит все DOM-элементы или экземпляры дочерних компонентов внутри компонента, имеющие атрибут ref. Доступ к этим элементам или экземплярам компонентов можно получить через $refs.
Пример
<div>
<input type="text" ref="inputField">
</div>
</template>
<script>
export default {
mounted() {
console.log(this.$refs.inputField); // Доступ к DOM-элементу
this.$refs.inputField.focus(); // Вызов метода DOM-элемента
}
}
</script>
Свойство $el представляет корневой DOM-элемент текущего экземпляра компонента. Доступ к этому свойству возможен только после монтирования компонента.
Пример
template: '<div>Привет, Vue!</div>'
});
const vm = app.mount('#app');
console.log(vm.$el); // <div id="app">Привет, Vue!</div>
$attrs
$attrs содержит все атрибуты, переданные из родительского компонента в текущий компонент, но не объявленные в дочернем компоненте. Эти атрибуты можно использовать для передачи дополнительных не-prop атрибутов дочерним компонентам.
Пример
<template>
<child-component custom-attr="value"></child-component>
</template>
<!-- ChildComponent.vue -->
<script>
export default {
mounted() {
console.log(this.$attrs); // { custom-attr: 'value' }
}
};
</script>
$listeners
$listeners содержит все слушатели (обработчики событий), переданные из родительского компонента в текущий компонент, и может быть напрямую привязан к корневому элементу компонента или другим элементам.
Пример
<template>
<button v-on="$listeners">Нажми меня</button>
</template>
<script>
export default {
mounted() {
console.log(this.$listeners); // { click: handleClick }
},
methods: {
handleClick() {
console.log('Кнопка нажата');
}
}
};
</script>
Методы экземпляра компонента
$mount()
Метод $mount() вручную монтирует компонент Vue в DOM-элемент. В Vue 3 монтирование обычно выполняется автоматически через createApp().mount(), а ручное монтирование требуется лишь в некоторых случаях.
Пример
template: '<div>Привет, Vue!</div>'
});
const vm = app.mount('#app');
$destroy()
Метод $destroy() уничтожает текущий экземпляр компонента, отвязывает все его прослушиватели событий и освобождает занимаемые им ресурсы. Он полезен в специфических сценариях, таких как динамическое создание и уничтожение компонентов.
Пример
$emit()
Метод $emit() используется для запуска пользовательских событий в текущем экземпляре компонента и передачи данных родительскому компоненту. Обычно он используется вместе с директивой v-on.
Пример
$nextTick()
Метод $nextTick() выполняет указанную функцию обратного вызова после завершения следующего цикла обновления DOM. Он используется для выполнения некоторых операций после обновления DOM.
Пример
// Операции, выполняемые после завершения обновления DOM
});
$watch()
Метод $watch() используется для отслеживания изменений данных в экземпляре компонента и выполнения указанной функции обратного вызова при изменении данных.
Пример
console.log(`Сообщение изменено с ${oldValue} на ${newValue}`);
});
Эти свойства и методы придают экземплярам компонентов Vue богатую функциональность и гибкость, позволяя удовлетворять разнообразные потребности разработчиков при создании сложных приложений. От управления данными до обработки событий, а затем до динамических операций с компонентами — всем можно управлять и контролировать через экземпляры компонентов.
Другие расширения