Vue.js строится вокруг концепции реактивности.
Каждое свойство объекта данных, объявленное в data,
автоматически отслеживается системой реактивности. При изменении
значения соответствующие участки DOM обновляются без прямого
вмешательства.
Пример:
const app = Vue.createApp({
data() {
return {
message: 'Привет, Vue!'
};
}
});
app.mount('#app');
Здесь message становится реактивным свойством. Любое
изменение app.message мгновенно отражается в DOM, если оно
связано через директиву {{ message }}.
Vue использует декларативные шаблоны, позволяя связывать данные с DOM с помощью директив:
v-bind — связывает атрибуты HTML с данными.v-model — двусторонняя привязка данных к элементам
формы.v-if, v-else-if, v-else —
условное отображение элементов.v-for — рендеринг списков.Пример использования:
<div id="app">
<p v-if="isVisible">{{ message }}</p>
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
</div>
const app = Vue.createApp({
data() {
return {
isVisible: true,
message: 'Список элементов',
items: [
{ id: 1, name: 'Элемент 1' },
{ id: 2, name: 'Элемент 2' }
]
};
}
});
app.mount('#app');
Компоненты позволяют разрабатывать интерфейсы модульно. Основные части компонента:
Пример:
app.component('user-card', {
props: ['user'],
template: `
<div class="card">
<h2>{{ user.name }}</h2>
<p>{{ user.age }} лет</p>
</div>
`
});
Использование:
<user-card :user="{ name: 'Алексей', age: 30 }"></user-card>
Вычисляемые свойства (computed)
позволяют создавать значения на основе других реактивных данных и
автоматически обновляются при изменении зависимостей.
const app = Vue.createApp({
data() {
return { firstName: 'Иван', lastName: 'Петров' };
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
});
Методы (methods) применяются для
выполнения действий при событиях или явного вызова:
methods: {
greet() {
alert(`Привет, ${this.fullName}`);
}
}
Для обработки событий используется директива v-on или
сокращённая запись @:
<button @click="greet">Сказать привет</button>
Vue позволяет передавать аргументы и использовать
модификаторы событий, такие как .prevent,
.stop, .once для управления поведением.
<form @submit.prevent="handleSubmit">
<input v-model="name">
<button>Отправить</button>
</form>
Vue 3 представил Composition API, который упрощает масштабирование сложных компонентов. Основные функции:
ref() — создание реактивного примитива.reactive() — создание реактивного объекта.computed() — вычисляемые свойства.watch() — наблюдатели.Пример использования Composition API:
import { createApp, ref, computed } from 'vue';
const app = createApp({
setup() {
const count = ref(0);
const double = computed(() => count.value * 2);
function increment() {
count.value++;
}
return { count, double, increment };
}
});
Vue предоставляет хуки жизненного цикла:
beforeCreate и created — инициализация
данных.beforeMount и mounted — работа с DOM.beforeUpdate и updated — реакция на
изменения данных.beforeUnmount и unmounted — очистка
ресурсов.Пример:
mounted() {
console.log('Компонент смонтирован в DOM');
}
Динамические компоненты позволяют подменять один компонент другим
через директиву :is:
<component :is="currentComponent"></component>
data() {
return { currentComponent: 'user-card' };
}
Composition API позволяет выносить повторяемую логику в отдельные функции:
function useCounter() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
Vue отлично интегрируется с сторонними библиотеками благодаря реактивной системе. Любые изменения реактивных объектов автоматически отражаются в шаблонах, даже если данные обрабатываются внешними функциями.
Пример с fetch:
const data = ref([]);
fetch('https://api.example.com/items')
.then(response => response.json())
.then(json => data.value = json);
import { ref, reactive, computed } from 'vue';
export default {
name: 'ExampleComponent',
props: ['title'],
setup() {
const state = reactive({ count: 0 });
const doubled = computed(() => state.count * 2);
function increment() {
state.count++;
}
return { state, doubled, increment };
}
}
Эта структура сочетает реактивность, вычисляемые свойства и методы, обеспечивая масштабируемость и удобство поддержки кода.