Vue 3 представляет собой значительное улучшение по сравнению с Vue 2, в первую очередь за счет переработанного ядра, повышения производительности и новых возможностей для работы с компонентами. Основные изменения:
setup(). Это упрощает повторное использование кода и
управление состоянием.Object.defineProperty и улучшает
поддержку массивов и вложенных объектов.Обновление зависимостей Необходимо убедиться, что используемые библиотеки совместимы с Vue 3. Официальные пакеты Vue Router и Vuex имеют версии для Vue 3, но сторонние плагины нужно проверять отдельно.
Проверка и обновление синтаксиса шаблонов
v-on.native больше не используются; события
нужно назначать напрямую.v-model теперь поддерживает синтаксис с указанием имени
свойства: v-model:propName.v-bind.sync заменяется на
v-model с именованными модификаторами.Переписывание компонентов с Options API на Composition API Основные шаги:
setup() в компоненте.ref() и reactive() для
реактивных данных.setup() и
возврат их для использования в шаблоне.computed() и watch() для
реактивных вычислений и наблюдателей.Пример изменения:
Vue 2 (Options API)
export default {
data() {
return { count: 0 };
},
methods: {
increment() {
this.count++;
}
}
}
Vue 3 (Composition API)
import { ref } from 'vue';
export default {
setup() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
}setup().useRouter() и
useRoute() вместо this.$router и
this.$route.import { useRoute, useRouter } from 'vue-router';
export default {
setup() {
const route = useRoute();
const router = useRouter();
const goHome = () => router.push('/');
return { route, goHome };
}
}
v-slot в едином стиле.<template>
<header>Заголовок</header>
<main>
<slot name="content"></slot>
</main>
</template>
<template v-slot:slotName="props">.vue-migration-helper,
который подсвечивает проблемные места.ref создаёт реактивное
примитивное значение. reactive создаёт реактивный объект
или массив.import { ref, reactive, computed, watch } from 'vue';
export default {
setup() {
const count = ref(0);
const state = reactive({ items: [] });
const double = computed(() => count.value * 2);
watch(count, (newVal) => {
console.log('Count изменился:', newVal);
});
return { count, state, double };
}
}
import { ref, watchEffect } from 'vue';
const count = ref(0);
watchEffect(() => {
console.log(`Текущее значение count: ${count.value}`);
});
Миграция с Vue 2 на Vue 3 требует тщательного планирования и понимания новых возможностей фреймворка. Использование Composition API и новых инструментов управления состоянием позволяет создавать более масштабируемые и поддерживаемые приложения.