Сверхурочные заняты каждый день, а спрос бьет как тигр. Тестовые вопросы навалились горой, и все мысли вернулись к родному городу.
Недавно учился в свободное времяVue3.0
соответствующие знания, хотяVue3.0
все ещеrc
Edition, но это не влияет на наше исследование. Сегодняшняя статья обо мнеVue3.0
четвертая статья. В предыдущем разделе мы объяснили, какvite
иvuecli
строитьVue3.0
среда разработки, затем введенаVue3.0
серединаsetup
,reactive
,ref
Подождите, сегодняшняя статья в основном объясняет следующее:
-
Vue3.0
используется вwatch
-
Vue3.0
Использование вычисляемых свойств в -
Vue3.0
используется вvue-router
-
Vue3.0
используется вvuex
Прежде чем начать эту статью, редактор предоставляетVue3.0
Среда разработки, адрес складаgit ee.com/fa_zijun/v UE…,Добро пожаловать. Эта статья была впервые опубликована в общедоступном аккаунте [Front-end some play], в котором основное внимание уделяетсяVue
и面试
Соответствующие публичные аккаунты для повышения их конкурентоспособности на рынке находятся в [внешнем интерфейсе]. Также нажмите на ссылку ниже, чтобы посетить редактор оVue3.0
другие связанные статьи
Чтобы изучить Vue3.0, давайте сначала разберемся с прокси
использоватьvite
построить одинVue3.0
среда обучения
Какие очки знаний я получил, используя Vue3.0 (1)
Vue3.0
используется вwatch
watch
существуетVue3.0
не является новой концепцией использованияVue2.x
, мы часто используемwatch
контролироватьVue
Выражение над экземпляром или изменение результата вычисления функции.
обзорVue2.0
серединаwatch
существуетVue2.0
, мы используемwatch
Мониторинг может осуществляться следующими способамиVue
Ниже перечислены изменения в результате вычисления выражения или функции над примером.
-
наиболее распространенное использование
export default { data() { return { name: '子君', info: { gzh: '前端有的玩' } } }, watch: { name(newValue, oldValue) { console.log(newValue, oldValue) }, 'info.gzh': { handler(newValue, oldValue) { console.log(newValue, oldValue) }, // 配置immediate会在watch之后立即执行 immediate: true } } }
мы можем
watch
Настройте, что отслеживать в свойствахVue
Свойства выше экземпляра также могут быть переданы через.
Ключевой путь для отслеживания изменения свойства в объекте также можно настроить с помощьюimmediate
Срабатывает сразу после прослушивания, настройкиdeep
Глубокий мониторинг свойств внутри объектов, независимо от того, насколько глубок их уровень вложенности. -
использовать
$watch
мониторПомимо обычного
watch
Помимо обозначения объекта,Vue
Пример приведен выше$watch
метод, через$watch
Более гибко отслеживать изменения определенного свойства. Например, в таком сценарии у нас есть форма, а затем мы хотим отслеживать изменения данных формы после того, как пользователь изменит форму. Но есть особый сценарий, то есть данные обратной засыпки формы запрашиваются асинхронно, в это время мы хотим отслеживать изменения после запроса данных в фоновом режиме, в это время мы можем использовать$watch
. Как показано в следующем коде:export default { methods: { loadData() { fetch().then(data => { this.formData = data this.$watch( 'formData', () => { // formData数据发生变化后会进入此回调函数 }, { deep: true } ) }) } } }
-
Выражение функции слушателя
Помимо прослушивания строк,
$watch
Первый параметр также может быть функцией, когда возвращаемое значение функции изменяется, вызывается функция обратного вызова.this.$watch(() => this.name, () => { // 函数的返回值发生变化,进入此回调函数 })
выше этоVue2.0
в мы используемwatch
Некоторые распространенные варианты написания , дляVue3.0
, потому что этоVue2.0
Реализована частичная обратная совместимость, поэтому приведенное выше использование находится вVue3.0
в принципе можно использовать, ноVue3.0
Большой изюминкой является то, чтоcomposition API
, так что помимоVue2.0
В дополнение к обозначению в , вы также можете использоватьcomponsition api
предоставлено вwatch
существуетVue3.0
используется вwatch
существуетVue3.0
, КромеVue2.0
Помимо написания , есть дваapi
Вы можете отслеживать изменения данных, первыйwatch
, второйwatchEffect
. заwatch
, что то же самое, чтоVue2.0
середина$watch
Использование в основном такое же, ноwatchEffect
даVue3.0
недавно предоставленныйapi
Использование часов
В следующем примере показано, как использоватьwatch
import { watch, ref, reactive } from 'vue'
export default {
setup() {
const name = ref('子君')
const otherName = reactive({
firstName: '王',
lastName: '二狗'
})
watch(name, (newValue, oldValue) => {
// 输出 前端有的玩 子君
console.log(newValue, oldValue)
})
// watch 可以监听一个函数的返回值
watch(
() => {
return otherName.firstName + otherName.lastName
},
value => {
// 当otherName中的 firstName或者lastName发生变化时,都会进入这个函数
console.log(`我叫${value}`)
}
)
setTimeout(() => {
name.value = '前端有的玩'
otherName.firstName = '李'
}, 3000)
}
}
watch
Помимо прослушивания одного значения или значения, возвращаемого функцией, вы также можете одновременно прослушивать несколько источников данных, как показано в следующем коде:
export default {
setup() {
const name = ref('子君')
const gzh = ref('前端有的玩')
watch([name, gzh], ([name, gzh], [prevName, prevGzh]) => {
console.log(prevName, name)
console.log(prevGzh, gzh)
})
setTimeout(() => {
name.value = '前端有的玩'
gzh.value = '关注我,一起玩前端'
}, 3000)
}
}
Использование watchEffect
watchEffect
использование иwatch
разные,watchEffect
Функция будет передана, а затем функция будет немедленно выполнена.Реактивные зависимости в функции будут отслеживаться, а затем, когда зависимости изменятся, переданная функция будет вызвана снова, как показано в следующем коде:
import { ref, watchEffect } from 'vue'
export default {
setup() {
const id = ref('0')
watchEffect(() => {
// 先输出 0 然后两秒后输出 1
console.log(id.value)
})
setTimeout(() => {
id.value = '1'
}, 2000)
}
}
-
остановить выполнение
Vue2.0
середина$watch
Возвращает функцию при вызове, выполните эту функцию, чтобы остановитьwatch
, как показано в следующем кодеconst unwatch = this.$watch('name',() => {}) // 两秒后停止监听 setTimeout(()=> { unwatch() }, 2000)
существует
Vue3.0
середина,watch
иwatchEffect
также вернетunwatch
функция для отмены выполнения, как показано в следующем кодеexport default { setup() { const id = ref('0') const unwatch = watchEffect(() => { // 仅仅输出0 console.log(id.value) }) setTimeout(() => { id.value = '1' }, 2000) // 1秒后取消watch,所以上面的代码只会输出0 setTimeout(() => { unwatch() }, 1000) } }
-
явные побочные эффекты
Представьте такой сценарий, на интерфейсе есть два выпадающих окна, данные второго выпадающего окна связаны в соответствии с данными первого выпадающего окна, когда данные первого выпадающего окна меняются , второе раскрывающееся окно. Данные извлекаются путем отправки сетевого запроса. В этот момент мы можем пройти
watchEffect
Для достижения этой функции, например, следующий кодimport { ref, watchEffect } from 'vue' function loadData(id) { return new Promise(resolve => { setTimeout(() => { resolve( new Array(10).fill(0).map(() => { return id.value + Math.random() }) ) }, 2000) }) } export default { setup() { // 下拉框1 选中的数据 const select1Id = ref(0) // 下拉框2的数据 const select2List = ref([]) watchEffect(() => { // 模拟请求 loadData(select1Id).then(data => { select2List.value = data console.log(data) }) }) // 模拟数据发生变化 setInterval(() => { select1Id.value = 1 }, 3000) } }
Теперь, если я переключаю данные первого раскрывающегося списка, запрос данных был отправлен, а затем я переключаю эту страницу на другую страницу, потому что запрос был отправлен, поэтому я надеюсь, что когда страница уйдет, я могу закончить этот запрос для предотвращения исключений после возврата данных, вы можете использовать его в это время
watchEffect
Эта ситуация обрабатывается входными параметрами, переданными для первой функции обратного вызова, как показано в следующем коде.function loadData(id, cb) { return new Promise(resolve => { const timer = setTimeout(() => { resolve( new Array(10).fill(0).map(() => { return id.value + Math.random() }) ) }, 2000) cb(() => { clearTimeout(timer) }) }) } export default { setup() { // 下拉框1 选中的数据 const select1Id = ref(0) // 下拉框2的数据 const select2List = ref([]) watchEffect(onInvalidate => { // 模拟请求 let cancel = undefined // 第一个参数是一个回调函数,用于模拟取消请求,关于取消请求,可以了解axios的CancelToken loadData(select1Id, cb => { cancel = cb }).then(data => { select2List.value = data console.log(data) }) onInvalidate(() => { cancel && cancel() }) }) } }
-
Vue3.0
Использование вычисляемых свойств в
подумай об этомVue2.0
Что мы обычно делаем с вычисляемыми свойствами? Я думаю самый распространенный это когда в шаблоне есть сложный расчет, вы можете использовать вычисляемое свойство для расчета сначала, а потом использовать его в шаблоне, собственно,Vue3.0
Роль вычисляемых свойств в иVue2.0
Эффект в принципе тот же.
-
существует
Vue2.0
Использование вычисляемых свойств вcomputed: { getName() { const { firstName, lastName } = this.info return firstName + lastName } },
-
существует
Vue3.0
Использование вычисляемых свойств в<template> <div class="about"> <h1>{{ name }}</h1> </div> </template> <script> import { computed, reactive } from 'vue' export default { setup() { const info = reactive({ firstName: '王', lastName: '二狗' }) const name = computed(() => info.firstName + info.lastName) return { name } } } </script>
и
Vue2.0
Такой же,Vue3.0
Вычисляемое свойство также может быть установленоgetter
иsetter
, например вычисляемое свойство в приведенном выше коде, которое устанавливает толькоgetter
, то есть добавлениеcumputed
Входящий параметр является функцией, тогда этоgetter
, если вы хотите установитьsetter
, его нужно записать следующим образомexport default { setup() { const info = reactive({ firstName: '王', lastName: '二狗' }) const name = computed({ get: () => info.firstName + '-' + info.lastName, set(val) { const names = val.split('-') info.firstName = names[0] info.lastName = names[1] } }) return { name } } }
Vue3.0
используется вvue-router
инициализацияvue-router
существуетVue2.0
в мы используемvue-router
, пройдетnew VueRouter
способ достиженияVueRouter
например, как код ниже
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const router = new VueRouter({
mode: 'history',
routes: []
})
export default router
но здесьVue3.0
, мы создаемVueRouter
Экземпляр немного изменился, напримерVue3.0
существуетmain.js
инициализирован вVue
Экземпляр должен быть написан следующим образом
import { createApp } from 'vue'
createApp(App).$mount('#app')
vue-router
Он также изменен на метод объявления этой функции.
import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({
// vue-router有hash和history两种路由模式,可以通过createWebHashHistory和createWebHistory来指定
history: createWebHashHistory(),
routes
})
router.beforeEach(() => {
})
router.afterEach(() => {
})
export default router
затем вmain.js
в, через
createApp(App).use(router)
ссылаясь наVue
середина
существуетsetup
используется вvue-router
существуетVue2.0
, мы проходимthis.$route
Вы можете получить текущий маршрут, а затем пройтиthis.$router
чтобы получить экземпляр маршрутизации для маршрутного перехода, но вsetup
, мы не можем получитьthis
, что также означает, что мы не можемVue2.0
использовать таким образомvue-router
, то вам нужно использовать его следующим образом
import { useRoute, useRouter } from 'vue-router'
export default {
setup() {
// 获取当前路由
const route = useRoute()
// 获取路由实例
const router = useRouter()
// 当当前路由发生变化时,调用回调函数
watch(() => route, () => {
// 回调函数
}, {
immediate: true,
deep: true
})
// 路由跳转
function getHome() {
router.push({
path: '/home'
})
}
return {
getHome()
}
}
}
В приведенном выше коде мы используемwatch
прослушивать изменения маршрута, за исключениемwatch
Кроме того, мы также можем использоватьvue-router
Предоставляемые функции жизненного цикла
import { onBeforeRouteUpdate, useRoute } from 'vue-router'
export default {
setup() {
onBeforeRouteUpdate(() => {
// 当当前路由发生变化时,调用回调函数
})
}
}
КромеonBeforeRouteUpdate
Кроме,vue-router
Функция хука жизненного цикла также предоставляется, когда маршрут покидает
onBeforeRouteLeave(() => {
console.log('当当前页面路由离开的时候调用')
})
Vue3.0
используется вvuex
фактическиvuex
существуетVue3.0
как использовать иvue-router
в основном то же самое
инициализацияvuex
Сначала создайте новыйstore/index.js
, а затем добавьте следующий код
import { createStore } from 'vuex'
export default createStore({
state: {},
mutations: {},
actions: {}
})
затем вmain.js
, используйте его следующим образом
createApp(App).use(store)
существуетsetup
используется вvuex
иuseRouter
Такой же,vuex
также обеспечиваетuseStore
Для использования при вызове, например, следующий код
import { useStore } from 'vuex'
export default {
setup() {
const store = useStore()
const roleMenus = store.getters['roleMenus']
return {
roleMenus
}
}
}
Остальное использование в основном иVue2.0
Использование такое же, вы можете обратиться к конкретномуvuex
официальная документация
Функция хука жизненного цикла в Vue3.0
Ранее мы говорили, чтоVue3.0
является частью совместимостиVue2.0
, Таким образом, дляVue2.0
Способ написания компонента, функция хука жизненного цикла не изменилась, но если использоватьcomponsition api
, то требуются некоторые корректировки
-
Отмена
beforeCreate
иcreated
в настоящее время использует
componsition api
когда на самом делеsetup
вместоbeforeCreate
иcreated
,так какsetup
Это фактическая функция входа компонента. -
beforeDestroy
иdestroyed
переименовансуществует
setup
середина,beforeDestroy
изменить имя наonBeforeUnmount
,destroyed
изменить имя наonUnmounted
-
Измените имя функции жизненного цикла на
on+XXX
,Напримерmounted
сталonMounted
,updated
сталonUpdated
существуетsetup
Как использовать функции жизненного цикла в
setup() {
onMounted(() => {
console.log('mounted!')
})
onUpdated(() => {
console.log('updated!')
})
onUnmounted(() => {
console.log('unmounted!')
})
}
Практическое использование иVue2.0
В основном это то же самое, но метод письма изменился, поэтому стоимость обучения очень низкая.
Суммировать
Это оVue3.0
Четвертая статья, каждая статья представляет собой резюме того, что я сделал в своем исследовании. я составилvue3.0
Среда разработки, адрес складаgit ee.com/fa_zijun/v UE…, внутренне интегрированныйtypescript
,eslint
,vue-router
,vuex
,ant desigin vue
Подождите, надеюсь, это поможет вам учитьсяVue3.0
Для вас обратите внимание на официальный аккаунт [Some play at the front end], который будет преподносить вам разные сюрпризы. Если вам понравилась эта статья, вы можете поставить мне лайк.
Эпилог
Не истощайте свое вдохновение и воображение, не будьте рабом своих моделей. - Винсент Ван Гог