Vue.js строится вокруг концепции реактивности, которая позволяет автоматически отслеживать изменения данных и обновлять представление без прямого вмешательства программиста. В ядре Vue используется механизм наблюдателей (watchers) и сеттеров/геттеров, который обеспечивает реактивное связывание между моделью и представлением.
Создание реактивного объекта осуществляется с помощью функции
reactive:
import { reactive } from 'vue';
const state = reactive({
count: 0,
user: {
name: 'Alice',
age: 25
}
});
Любые изменения свойств state автоматически обновляют
все компоненты, использующие эти данные. Для наблюдения отдельных
значений используется ref:
import { ref } from 'vue';
const message = ref('Привет, Vue!');
message.value = 'Новая строка';
Важно: ref применяется для примитивных
типов, reactive — для объектов и массивов.
Vue.js использует компоненты, которые инкапсулируют логику, шаблон и стили. Каждый компонент может быть определён через объект или с помощью Composition API.
export default {
name: 'UserCard',
props: {
user: Object
},
setup(props) {
const greeting = `Привет, ${props.user.name}`;
return { greeting };
},
template: `<div>{{ greeting }}</div>`
};
Компоненты можно объединять и повторно использовать, создавая иерархию вложенности, что улучшает масштабируемость приложений.
Props позволяют передавать данные от родителя к потомку, а emit используется для обратной связи:
props: ['title'],
methods: {
notifyParent() {
this.$emit('update', this.title);
}
}
Vue.js предоставляет набор директив, которые добавляют реактивную функциональность в шаблоны.
v-if, v-else-if, v-else —
условный рендеринг.v-for — циклический рендеринг элементов.v-model — двустороннее связывание данных.v-bind — динамическое связывание атрибутов.v-on — обработка событий.Пример условного рендеринга:
<div v-if="isLoggedIn">Добро пожаловать!</div>
<div v-else>Пожалуйста, войдите</div>
Composition API позволяет более гибко структурировать логику компонентов, разделяя её на реактивные состояния, вычисляемые свойства и функции.
import { ref, computed } from 'vue';
export default {
setup() {
const count = ref(0);
const double = computed(() => count.value * 2);
function increment() {
count.value++;
}
return { count, double, increment };
}
};
Преимущество Composition API: возможность группировать функциональность по логике, а не по типу опций (data, methods, computed).
Для крупных приложений Vue использует:
import { createRouter, createWebHistory } from 'vue-router';
const routes = [
{ path: '/', component: Home },
{ path: '/profile', component: Profile }
];
const router = createRouter({
history: createWebHistory(),
routes
});
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({ name: '', age: 0 }),
actions: {
setName(newName) {
this.name = newName;
}
}
});
Использование централизованного состояния упрощает синхронизацию данных между компонентами.
Асинхронные операции легко интегрируются с Vue с помощью
async/await в setup:
import { ref, onMounted } from 'vue';
export default {
setup() {
const data = ref(null);
const error = ref(null);
onMounted(async () => {
try {
const response = await fetch('/api/data');
data.value = await response.json();
} catch (e) {
error.value = e;
}
});
return { data, error };
}
};
Vue автоматически отслеживает зависимости и обновляет только изменённые части DOM, но дополнительные методы оптимизации включают:
v-once — рендеринг элемента один раз.v-memo — кеширование вычисленных шаблонов.defineAsyncComponent для динамической
загрузки больших компонентов.import { defineAsyncComponent } from 'vue';
const AsyncComponent = defineAsyncComponent(() =>
import('./BigComponent.vue')
);
Для тестирования Vue-компонентов применяются библиотеки:
@vue/test-utils — unit-тесты компонентов.Jest или Vitest — для запуска тестов и
мокирования зависимостей.Пример теста:
import { mount } from '@vue/test-utils';
import UserCard from '@/components/UserCard.vue';
test('отображает имя пользователя', () => {
const wrapper = mount(UserCard, { props: { user: { name: 'Alice' } } });
expect(wrapper.text()).toContain('Alice');
});
Vue активно используется с:
Структура современных Vue-проектов ориентирована на модульность, где каждый компонент и модуль состояния имеют отдельную папку, а маршруты и сервисы организованы по логике приложения.
Эти принципы обеспечивают устойчивое и масштабируемое развитие приложений, минимизируют повторение кода и упрощают поддержку больших проектов на Vue.js.