Vue3 onMounted: 深入探讨
- 编程知识
- 2023-05-26
- 10
一、介绍
Vue3 onMounted是Vue3中新增的一个生命周期函数。它类似于Vue2中的mounted钩子函数,但是有些不同,我们将在下面的文章中进行详细介绍。
二、使用Vue3 onMounted
使用Vue3 onMounted非常简单。只需要导入onMounted函数,然后将它作为setup函数中的一个属性即可:
<template>
<div>
{{ message }}
</div>
</template>
<script setup>
import { onMounted } from 'vue'
export default {
setup() {
onMounted(() => {
console.log('Component is mounted!')
})
return {
message: 'Hello World!'
}
}
}
</script>
三、Vue3 onMounted与Vue2 mounted函数的区别
Vue3 onMounted与Vue2 mounted函数非常相似,但也有一些区别。首先,Vue3 onMounted是放在setup函数中的,而不是Vue2 mounted函数中。其次,Vue3 onMounted的代码执行时间比Vue2 mounted函数要早。Vue3 onMounted会在template中的内容被挂载之前执行,而Vue2 mounted会在template中的内容被完全解析和挂载之后再执行。
因此,如果我们要访问DOM元素或者计算某个组件的尺寸,我们需要在Vue3 onMounted中使用ref或者watchEffect等相关API。下面是一个例子:
<template>
<div v-if="show">Hello World!</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
export default {
setup() {
const show = ref(false)
onMounted(() => {
console.log('Component is mounted!')
// 让show值为true,以便在DOM中显示元素
show.value = true
})
return {
show
}
}
}
</script>
四、Vue3 onMounted的用途
1. 做一些初始化操作
Vue3 onMounted可以被用于一些需要在组件挂载后才能执行的初始化操作,例如从服务器获取数据、初始化Websocket连接等等。下面是一个简单的例子:
<template>
<div>
{{ message }}
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
export default {
setup() {
const message = ref('')
onMounted(async () => {
const res = await fetch('/api/message')
const data = await res.json()
message.value = data.message
})
return {
message
}
}
}
</script>
2. 监听用户滚动行为
Vue3 onMounted可以被用于监听用户的滚动行为,例如实现“无限滚动”等功能。我们可以在组件挂载后,使用addEventListener监听滚动事件。
<template>
<div>
<p v-for="item in items" :key="item">{{ item }}</p>
</div>
</template>
<script setup>
import { onMounted, ref } from 'vue'
export default {
setup() {
const items = ref([1, 2, 3])
onMounted(() => {
window.addEventListener('scroll', handleScroll)
})
function handleScroll() {
// 这里实现"无限滚动"逻辑
console.log('Scroll position:', window.scrollY)
}
return {
items
}
}
}
</script>
3. 使用第三方库
有些第三方JS库需要在DOM元素加载完成后才能被使用,此时可以在Vue3 onMounted中导入这些库,然后进行初始化操作。下面是一个简单的案例,使用Swiper实现轮播图:
<template>
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
</div>
</div>
</template>
<script setup>
import { onMounted } from 'vue'
import Swiper from 'swiper';
import 'swiper/css/swiper.min.css';
export default {
setup() {
onMounted(() => {
new Swiper('.swiper-container', {
// Swiper配置项
})
})
}
}
</script>
结语
Vue3 onMounted是Vue3中一个非常重要的生命周期函数,它可以帮助我们在组件挂载后执行初始化操作,并且可以用来监听用户滚动行为或者使用第三方库等等。因此,在实际开发中,我们需要熟练掌握它的用法。