vue3中實(shí)現(xiàn)異步組件的方法實(shí)例
使用場(chǎng)景一:當(dāng)組件進(jìn)入視窗時(shí)再進(jìn)行加載
假設(shè)頁(yè)面中有三個(gè)組件A、B、C
C組件中有一張圖片
<template>
<div class="A">
<A></A>
</div>
<div class="B">
<B></B>
</div>
<div>
<C></C>
</div>
</template>
<script setup>
import A from './components/A.vue'
import B from './components/B.vue'
import C from './components/C.vue'
</script>打開頁(yè)面:

如果一個(gè)頁(yè)面中的內(nèi)容非常多,用戶再首次打開時(shí)并沒有瀏覽到下方的內(nèi)容,但頁(yè)面必須加載完下方的內(nèi)容才會(huì)顯示,這無(wú)疑非常影響性能
接下來我們做一些調(diào)整
defineAsyncComponent創(chuàng)建一個(gè)只有在需要時(shí)才會(huì)加載的異步組件。
defineAsyncComponent是vue3提供的內(nèi)置api。用于異步加載組件
但是僅靠這個(gè)api并不能完成我們所需要的功能
這里我們還需要借助vueUse中的一個(gè)api
首先我們需要安裝一下vueUse的依賴
npm i @vueuse/core
我們需要使用vueUse中的useIntersectionObserver
安裝完成后來修改一下我們的代碼:
<template>
<div class="A">
<A></A>
</div>
<div class="B">
<B></B>
</div>
<div ref="target">
<C v-if="targetIsVisible"></C>
</div>
</template>
<script setup>
import A from './components/A.vue'
import B from './components/B.vue'
import { defineAsyncComponent, ref } from 'vue';
import { useIntersectionObserver } from '@vueuse/core'
const C = defineAsyncComponent(() => //異步引入組件
import('./components/C.vue')
)
const target = ref(null) //獲取需要操作的dom元素
const targetIsVisible = ref(false) //定義一個(gè)dom元素顯示與隱藏開關(guān)
const { stop } = useIntersectionObserver( //定義一個(gè)函數(shù)用于控制
target,
([{ isIntersecting }]) => { //這里的isIntersecting表示的是dom元素是否進(jìn)入視窗,值為true或flase
console.log(isIntersecting);
if (isIntersecting) {
targetIsVisible.value = isIntersecting //將isIntersecting賦值給開關(guān),即表示進(jìn)入視窗就顯示該dom元素
}
},
)
</script>

這樣就實(shí)現(xiàn)了異步加載C組件,在頁(yè)面視窗滾動(dòng)到C組件時(shí)才會(huì)加載C組件。
總結(jié)
到此這篇關(guān)于vue3中實(shí)現(xiàn)異步組件的文章就介紹到這了,更多相關(guān)vue3實(shí)現(xiàn)異步組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
這篇文章主要介紹了詳解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
淺談Vue.js應(yīng)用的四種AJAX請(qǐng)求數(shù)據(jù)模式
本篇文章主要介紹了淺談Vue.js應(yīng)用的四種AJAX請(qǐng)求數(shù)據(jù)模式,本文將詳細(xì)介紹在Vue應(yīng)用程序中實(shí)現(xiàn)AJAX的四個(gè)方法,有興趣的可以了解一下2017-08-08
Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件
這篇文章主要為大家詳細(xì)介紹了Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Vue項(xiàng)目查看當(dāng)前使用的elementUI版本的方法
今天小編就為大家分享一篇Vue項(xiàng)目查看當(dāng)前使用的elementUI版本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09
Vue中對(duì)比scoped css和css module的區(qū)別
這篇文章主要介紹了Vue中scoped css和css module的區(qū)別對(duì)比,scoped css可以直接在能跑起來的vue項(xiàng)目中使用而css module需要增加css-loader配置才能生效。具體內(nèi)容詳情大家參考下本文2018-05-05
Vue3項(xiàng)目打包后部署到服務(wù)器 請(qǐng)求不到后臺(tái)接口解決方法
在本篇文章里小編給大家整理了關(guān)于Vue3項(xiàng)目打包后部署到服務(wù)器 請(qǐng)求不到后臺(tái)接口解決方法,有需要的朋友們可以參考下。2020-02-02

