Исходный код vue3 был открыт в течение длительного времени, и официальный сайт также быстро выпустил новые документы. Но моя скорость всегда сравнима со скоростью улитки. Точно, недавно появился проект по vue3. Тогда я напишу“用后感”Бар! Поделитесь пониманием vue3, полученным в проекте, со всеми.
Вот простое резюме.Я лично считаю, что моменты, на которые стоит обратить внимание в vue3:
- 1. Изменения в механизме перехвата данных
- 2. Внедрение комбинированного API
- 3. Серия сюрпризов, которые принесла функция настройки
- 4. Практическое применение адаптивного API
1. Изменения в механизме перехвата данных
vue2 перехватывает изменения данных через Object.defineProperty(). После обновления до vue3 автор больше не использует Object.defineProperty для захвата данных, а использует новые возможности es6.proxyдля захвата данных. Поскольку в vue2 отзывчивые данные должны быть предварительно определены инициализацией data(), но после vue3 данные в data больше не отслеживаются в ответ, а преобразуются вproxyЗатем агент выполняет отслеживание обновлений.
注意: В vue3 он будет использовать геттер или сеттер для обхода всех свойств и преобразования их в прокси-прокси для любых данных, определенных в функции data().
Во-вторых, введение комбинированного API
Самым большим изменением в vue3 является введение composerApi, который является основной частью vue3.
В том числе следующие аспекты:
- А. функция настройки
Следующий раздел имеет подробное представление, поэтому я не буду вносить в подробности здесь.
- б. Крючки жизненного цикла
Vue3 отказывается от глобального API, вводя
onXВ виде функции настройки поддерживается вызов функции ловушки.
- c. Обеспечить/внедрить
Vue3 также поддерживает использование Provide и Inject в функции настройки, если они представлены в соответствующем месте:
import { provide } from 'vue';
setup(){
provide(name, 'hello!');
}
import {inject} from 'vue';
setup(){
inject('name', [default-value]: string);
}
- г. получить текущий экземпляр
Поддержка доступа к собственному экземпляру в функции настройки
import { getCurrentInstance } from 'vue';
setup() {
const internalInstance = getCurrentInstance();
}
3. Серия сюрпризов, которые принесла функция настройки
В vue3 введение функции настройки, этого функционального метода разработки, хорошо интегрирует код.
-
В vue2 к данным данных необходимо обращаться, вызывая это, когда они используются.Теперь в vue3 реактивный и ref используются для установки отзывчивых данных.
data() {
return {
name: 'aaa',
};
}
=>
const name = ref('aaa');
就像简单的定义变量一样,使用ref就可以为变量初始化
-
Функция настройки заменяет метод определения функции методов
В функции настройки мы можем выборочно показывать функции, которые мы определяем, внешнему миру.
В vue2 функции, которые мы определяем в методах, привязаны к этому.this得有多累啊 (> 3 >), а функция setup просто решает эту проблему и защищает приватные переменные, которые мы определяем сами.
methods: {
function unkouwnFunc() {
console.log(3333);
}
},
=>
setup () {
function unkownFunc() {
console.log(3333);
}
return {
unkownFunc, // return之后,该函数绑定到了组件实例上,可以在模版中直接使用
};
}
-
Об использовании события emit в функции настройки
import { SetupContext } from 'vue';
emits: ['eventName'],
setup(props, ctx: SetupContext){
ctx.emit('event-name', value);
}
-
Кроме того, для поддержки функции настройки автор выбрасывает хук глобального жизненного цикла, который действует только в функции настройки.
import { onBeforeMount, onMounted, onBeforeUpdate, onUpdated, onBeforeUnmount, onUnmounted } from 'vue';
setup() {
onBeforeMount() {
your code
}
onMounted () {
your code
}
onBeforeUpdate() {
your code
}
onUpdated() {
your code
}
onBeforeUnmount() {
your code
}
onUnmounted() {
your code
}
}
В-четвертых, практическое применение адаптивного API.
-
Ref Vs Reactive
ref — это способ создания примитивного типа данных, который возвращает объект RefImpl. value указывает на его связанное значение. Возвращает свое значение реактивному объекту, если используется для создания объекта.
Реактивный объект возвращает прокси-прокси, когда он создается, он будет проходить каждое свойство одно за другим и создавать его как прокси-метод es6.
Из распечатанных данных мы видим, что .value типа объекта, созданного данными ref, соответствует реактивной структуре данных. То есть, когда ref создает данные объектного типа, они автоматически преобразуются в реактивные данные.
-
Удобство Ref и реактивных API
Реактив ref в vue3 очень прост в использовании, почему вы так говорите? Потому что vue напрямую дает здесь свой глобальный API. В любом случае мы можем напрямую импортировать и создавать эти адаптивные данные. Импортируя, экспортируя, внедряя код
集中化管理.так называемый
集中化管理, Здесь имеется в виду улучшение гибкости кода.В vue2 хранилище используется для централизованного управления состоянием, а теперь мы можем напрямую отказаться от хранилища. Потому что отзывчивый API vue3 дает нам очень приятный опыт.
>> state.js
store = {
state: reactive({
count: 0,
})
};
export default store;
=>
import store from 'state.js';
setup() {
// set count
store.count = 2;
// get count
}
-
Об использовании вычислений и часов
computed: {
aaa() => {
return 333
}
},
watch: {
bbb(newv, oldv) {
console.log(newv, oldv);
}
},
}
=>
import { computed } from 'vue';
const aaa = computed(() => {
return 333;
})
watch & watchEffect
import {watchEffect, watch} from 'vue';
// watch 实现了$watch全部的功能
// 单个数据源侦听
watch((bbb, (current, prev)) => {
Your Code
});
// 多个数据源的侦听
watch([aaa, bbb], ([current, prev], [current2, prev2]) => {
Your Code
})
// watchEffect 只追踪依赖项的变更,在变化时,会执行回调函数
const aaa = ref(0);
watchEffect(() => {
console.log(aaa.value);
});
watch VS watchEffect
1. Ленивое слушание
watchEffect имеет только функцию отслеживания изменений и будет выполнять функции обратного вызова при отслеживании зависимостей. По сравнению с watch он будет лениво прослушивать зависимости и не будет выполнять функцию обратного вызова при отслеживании зависимостей.
- 2, поддержка текущего и предыдущего государственного визита
3. Объясните более конкретно, при каких обстоятельствах должна запускаться функция подкачки.
Должно быть, watch дает больше возможностей, чем watchEffect. Например, чтобы получить предыдущий и текущий статус, через изменение статуса мы можем судить о том, выполняется ли соответствующий обратный вызов.
Для получения более подробной информации, пожалуйста, нажмите здесь>
END TK U