组件数据懒加载

组件数据懒加载-基本使用

问题:
电商类网站,尤其是首页,内容有好几屏,而如果一上来就加载所有屏的数据,并渲染所有屏的内容会导致首页加载很慢
可以,通过useIntersectionObserver优化新鲜好物和人气推荐模块,实现数据懒加载
数据懒加载:等组件正式进入到可视区中时,才把组件内部的ajax请求发起,否则不请求数据

import { onMounted, ref } from "vue";
import { useIntersectionObserver } from "@vueuse/core";
const target = ref(null);
onMounted(() => {
  const { stop } = useIntersectionObserver(
    target.value,
    ([{ isIntersecting }]) => {
      console.log("新鲜好物", isIntersecting);
      //  可见
      if (isIntersecting) {
        // 发请求
        home.getNewList()
        // 停止监听
        stop();
      }
    }
  );
});

组件数据懒加载-封装

封装组件数据懒加载可复用的逻辑
在这里插入图片描述
首页中,很多地方都应该使用组件数据懒加载这个功能,不管是哪个模块使用,下面代码都会重复书写
事实上,唯一可能会随着业务使用发生变化的是 ajax接口的调用
其余的部分我们进行重复使用,抽离为可复用逻辑
核心代码:

封装通用的懒加载数据api src/utils/hooks.ts

import { useIntersectionObserver } from "@vueuse/core";
import { onMounted, ref } from "vue";

export function useLazyData(fn: () => void) {
  const target = ref(null);
  onMounted(() => {
    const { stop } = useIntersectionObserver(
      target.value,
      ([{ isIntersecting }]) => {
        //  可见
        if (isIntersecting) {
          // 发请求
          fn()
          // 停止监听
          stop();
        }
      }
    );
  });
  return target
}

使用传参

const target= useLazyData(()=>{
  home.getHotList(); //不同调用的axios 传参过去
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值