Я использую vue2 в течение нескольких лет.После выхода vue3 я сразу же зашел на официальный сайт, чтобы изучить и использовать его.Вот некоторые из моих собственных идей.
1. Зачем нужен vue3
Мы часто сталкиваемся с некоторыми неприятными ситуациями при использовании vue2, такими как:
-
С ростом функций и увеличением спроса код сложных компонентов становится все труднее поддерживать, а логика хаотична.Хотя vue2 тоже имеет некоторые методы повторного использования, есть определенные недостатки.Например, Mixin мы Часто использование особенно склонно к именованию.Конфликт, намерение открытой переменной не очень очевидно, и легко конфликтовать при повторном использовании в других компонентах.
-
Vue2 имеет очень ограниченную поддержку typeScript и не учитывает интеграцию ts.
Появление vue3 должно решить недостатки vue2.Его составной API очень хорошо решает проблему логического повторного использования, а исходный код vue3 написан на ts, и поддержка ts очень хорошая. Мы можем использовать благословение ts в процессе разработки проекта, чтобы сделать код более надежным.
2. Преимущества vue3
- vue3 поддерживает большинство функций vue2 и совместим с vue2.
- vue3 контрастирует со значительным улучшением производительности vue2
- Уменьшение размера упаковки на 41 %
- Начальный рендеринг на 55% быстрее, обновление на 133% быстрее
- 54% сокращение использования памяти
- Композиционный API vue3 реализует логическую модульность и повторное использование.
- Добавлены новые функции, такие как компоненты телепорта, глобальная модификация и оптимизация API и т. д.
3. Различия в принципах реагирования
Vue2.x реализует принцип двусторонней привязки данных, который заключается в чтении и изменении в соответствии с конкретным ключом через Object.defineProperty es5. Среди них метод установки реализует перехват данных, а метод получения реализует модификацию данных. Но вы должны сначала знать, какой ключ вы хотите перехватить и изменить, поэтому vue2 ничего не может сделать с новыми свойствами, такими как невозможность отслеживать добавление и удаление свойств, изменения индекса и длины массива, решение для vue2 заключается в использовании Vue.set(object, propertyName, value) для добавления реактивности к вложенным объектам.
Vue3.x использует более быстрый собственный прокси-сервер ES2015 вместо Object.defineProperty. Прокси можно понимать как настройку уровня «перехвата» перед объектом, и доступ к объекту из внешнего мира должен сначала пройти этот уровень перехвата, поэтому он обеспечивает механизм фильтрации и перезаписи доступа к внешнему миру. Прокси может напрямую прослушивать объекты вместо свойств и возвращать новый объект с лучшей реактивной поддержкой.
4. Различия в жизненном цикле
beforeCreate -> используйте setup()
создано -> используйте setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed -> onUnmounted
errorCaptured -> onErrorCaptured
Если вы хотите использовать функцию жизненного цикла на странице, предыдущей операцией vue2 является запись жизненного цикла непосредственно на странице, а на vue3 нужно ссылаться, поэтому 3 может сжимать код до более низкого уровня.
5. Различия в структуре каталогов проекта по умолчанию
vue3 удалил каталог файлов конфигурации, папки config и build, удалил статическую папку, добавил общедоступную папку и переместил index.html в общедоступный, а также добавил папку представлений в папку src для компонентов просмотра категорий и общих компонентов.
6. vue3 оптимизация глобального API
В Vue3 как глобальные, так и внутренние API были реорганизованы с учетом поддержки древовидной структуры. Таким образом, глобальный API теперь доступен только как именованный экспорт сборок модулей ES.
import { nextTick } from 'vue'
nextTick(() => {
// 一些和DOM有关的东西
})
входной файл
// vue2写法
// vue2全局配置的修改,会修改Vue对象的属性
// 在不同的app中,共享一份有着不同配置的Vue对象,也变得非常困难
import Vue from 'vue'
import App from './App.vue'
Vue.config.xx=xx
Vue.use(...)
Vue.mixin(...)
new Vue({
render:h=>h(app)
}).$mount('#app')
// vue3写法
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(APP) // 创建一个app实例
app.config.xx=xx // 在实例上修改配置,不会发生冲突
app.use(...)
app.mixin(...)
app.mount('#app')