数据懒加载

113 阅读1分钟

本篇文章记录的是, 在 vue 项目中使用第三方库 VueUse 中的 intersectionobserver 这个hooks来实现数据懒加载。

一、背景

在日常开发工作中,有时候我们会遇到需要加载显示很多不同数据的页面,如果不做任何处理,那一进入页面就会开始疯狂调各种接口去获取相应的数据,显然这种一次性加载的方式会降低性能,减缓加载速度,从而影响用户体验。所以我们需要进行数据懒加载的优化处理,实现的思路是当组件进入到可视范围的时候才去调接口请求数据。

二、关于 useIntersectionObserver hooks

它的作用是检测目标元素的可见性。官方文档

/**
 * Detects that a target element's visibility.
 *
 * @see https://vueuse.org/useIntersectionObserver
 * @param target
 * @param callback
 * @param options
 */
export declare function useIntersectionObserver(
  target: MaybeElementRef,
  callback: IntersectionObserverCallback,
  options?: UseIntersectionObserverOptions
): {
  isSupported: Ref<boolean>
  stop: () => void
}

三、具体使用

1、安装工具库

npm i @vueuse/core 
or
yarn add @vueuse/core

2、代码

① template部分

为想要检查的元素提供一个模板ref: ref="target"

<template>
  <v-audit ref="target" >
    <slot name="contentInfo"></slot>
  </v-audit>
</template>

② script部分

导入钩子函数并使用

<script>
import { defineComponent, ref } from "@vue/composition-api";
import { useIntersectionObserver } from '@vueuse/core'

export default defineComponent({

setup (props, { emit }) {

    const target = ref(null)

    const { stop } = useIntersectionObserver(

      target, // 被监听的元素

      ([{ isIntersecting }]) => {

        // 元素是否进入了可视范围

        if(isIntersecting) {

          stop() // 停止监听

          do something… // 具体的业务逻辑
        }
      },
    )

    return { ...toRefs(state), target};
  },
});

</script>

OK,此时我们的优化工作就做完了。那就休息一下吧~

320e85a2500b48cfb14a350a163c63fa~tplv-k3u1fbpfcp-zoom-in-crop-mark 1512 0 0 0.webp