Vue.js строится на концепции компонентов — изолированных, переиспользуемых блоков интерфейса, каждый из которых управляет своей логикой, состоянием и разметкой. Понимание структуры компонента является ключевым для эффективной разработки на Vue.
Vue-компонент может быть определён в виде отдельного файла с
расширением .vue или как объект в JavaScript. Файл
.vue разделяется на три основные секции:
<template> — шаблон, содержащий
HTML-разметку компонента.<script> — скриптовая часть, где
определяется логика компонента: данные, методы, вычисляемые свойства,
жизненный цикл.<style> — стили компонента,
которые могут быть локальными или глобальными.Пример минимального компонента:
<template>
<div>
<h1>{{ title }}</h1>
<button @click="increment">Нажми меня</button>
<p>Счётчик: {{ count }}</p>
</div>
</template>
<script>
export default {
data() {
return {
title: 'Пример компонента Vue',
count: 0
};
},
methods: {
increment() {
this.count += 1;
}
}
}
</script>
<style scoped>
h1 {
color: #42b983;
}
button {
padding: 8px 16px;
font-size: 14px;
}
</style>
<template>)Шаблон отвечает за визуальное отображение компонента. Важные особенности:
Декларативная привязка данных: использование
синтаксиса {{ }} для вывода данных из объекта
data.
Директивы Vue: специальные атрибуты, управляющие поведением DOM:
v-if / v-else / v-show —
условный рендеринг элементов.v-for — итерация по массивам или объектам.v-bind — динамическое связывание атрибутов.v-on — обработка событий.Слоты (<slot>): позволяют
передавать контент внутрь компонента извне.
<script>)Скриптовая часть компонента содержит все логические элементы:
data() — функция, возвращающая
объект с реактивными свойствами. Каждый компонент получает отдельный
экземпляр данных.
methods — объект с функциями,
которые выполняют действия и могут изменять состояние.
computed — вычисляемые свойства,
автоматически обновляющиеся при изменении зависимостей.
watch — отслеживание изменений
данных и выполнение действий при их изменении.
Жизненный цикл компонента: специальные хуки, вызываемые на разных этапах существования компонента:
beforeCreate / createdbeforeMount / mountedbeforeUpdate / updatedbeforeUnmount / unmountedПример использования computed и watch:
computed: {
doubleCount() {
return this.count * 2;
}
},
watch: {
count(newVal, oldVal) {
console.log(`Счётчик изменился с ${oldVal} на ${newVal}`);
}
}
<style>)Секция стилей позволяет управлять внешним видом компонента. Основные моменты:
Scoped стили: атрибут scoped
ограничивает применение стилей только текущим компонентом.
CSS препроцессоры: можно использовать
lang="scss" или lang="less" для подключения
препроцессоров.
Динамическое управление классами:
:class="{ active: isActive }" — условное применение
класса.:style="{ color: textColor }" — динамическая привязка
стилей.Компоненты можно использовать как локально, так и глобально.
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
}
}
import { createApp } from 'vue';
import App from './App.vue';
import MyComponent from './MyComponent.vue';
const app = createApp(App);
app.component('MyComponent', MyComponent);
app.mount('#app');
Vue поощряет разделение проекта на отдельные .vue файлы,
что улучшает читаемость и повторное использование кода. Рекомендуется
структурировать проект по функциональным папкам:
src/
├─ components/
│ ├─ Header.vue
│ ├─ Footer.vue
│ └─ Button.vue
├─ views/
│ ├─ Home.vue
│ └─ About.vue
├─ App.vue
└─ main.js
Такой подход облегчает поддержку больших приложений и обеспечивает удобное управление зависимостями между компонентами.
scoped стили для предотвращения конфликта
с глобальными классами.Структура Vue-компонента обеспечивает строгую организацию кода, реактивность данных и масштабируемость приложения. Понимание всех частей компонента позволяет создавать сложные интерфейсы с высокой поддерживаемостью и повторным использованием кода.