vue3组件数据懒加载,进入可视区加载数据

说明:有时在日常开发中,如果浏览器访问的页面数据过多(比如是些电商平台,数据比较多),为减少并发量,减少系统资源的消耗,这时候就需要用到懒加载,实现当组件进入浏览器窗口可视区后再去发请求加载数据。

演示:

首先安装vueuse hooks插件

npm i @vueuse/core

封装hooks函数 数据懒加载函数useLazyData

import { useIntersectionObserver } from '@vueuse/core'
import { ref } from 'vue'
// 数据懒加载函数
export const useLazyData = (apiFn:Function) => {
  // console.log(apiFn);
  const target = ref(null)
  const result = ref<Song[]>([])
  // stop 停止观察
  const { stop } = useIntersectionObserver(
    // 监听的目标元素
    target,
    ([{ isIntersecting }], observerElement) => {
      if (isIntersecting) {
        // isIntersecting 是否进入可视区
        stop()
        // 调用API获取数据
        apiFn().then((data:any) => {
          result.value = data.data.result.songs
        })
      }
    },
    //配置选项,只有相交的比例大于0就触发
    {
      threshold: 0
    }
  )
  // 返回 ==>数据(dom,后台的数据)
  return { target, result }
}

组件中使用hooks函数

<script lang="ts">
//请求api
import { getsong } from './server/goods'
//引入数据懒加载函数hook
import { useLazyData } from './hooks'
export default{
  setup(){
    const { target, result } = useLazyData(()=>getsong('最美的太阳'))
    return { song: result, target }
  }
}
</script>

<template>
  <div style="height: 1000px;background-color: #152acc2b;">内容内容</div>
  <ul ref="target">
    <li v-for="item in song" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<style scoped></style>

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值