vue+react 项目全局loading 封装

本文介绍如何在vue+react项目中封装全局Loading组件,并提供了在antd+react+ts以及vue3+element plus+ts环境下的使用示例。通常,这个组件会与ajax或axios请求结合使用,加载样式可根据实际项目需求进行定制。
摘要由CSDN通过智能技术生成

这里讲的是封装loading,封装完后可以直接使用,一般配合封装的ajax或axios等请求使用

antd+react+ts

import React from 'react';
import { Spin } from 'antd';
import { createRoot } from 'react-dom/client';

let loadingCount = 0;
let root:any;

const startLoading = () => {
  if (loadingCount === 0) {
    const div = document.createElement('div');
    div.setAttribute('id', 'loading-container');
    document.body.appendChild(div);

    root = createRoot(div);
    root.render(<Spin size="large" />);
  }

  loadingCount++;
};

const endLoading = () => {
  loadingCount--;

  if (loadingCount === 0 && root) {
    const div = document.getElementById('loading-container');
    if (div) {
      root.unmount();
      document.body.removeChild(div);
    }
  }
};

export  {
  startLoading,
  endLoading,
};

这里需要配合样式一起使用,样式可以直接写到全局样式中(具体按照你的实际项目中来)

#loading-container {
    position: absolute;
    top: 0;
    left: 0;
    background-color:  rgba(255, 255, 255, .9); /* 半透明灰色背景 */
    width: 100%;
    height: 100%;
    pointer-events: none;
    z-index: 9999;
}

#loading-container .ant-spin {
    position: absolute;
    top: 45%;
    left: 50%;
}

使用示例

import { startLoading,endLoading, } from './loading';

//在需要显示loading的地方调用

startLoading()

//在需要隐藏loading的地方调用

endLoading()

vue3 + element plus +ts 

import { ElLoading } from "element-plus";

/* 全局请求 loading */
let loadingInstance: ReturnType<typeof ElLoading.service>;

/**
 * @description 开启 Loading
 * */
   const startLoading = () => {
    loadingInstance = ElLoading.service({
    fullscreen: true,
    lock: true,
    text: "Loading",
    // background: "rgba(0, 0, 0, 0.7)"
    });
   };

/**
 * @description 结束 Loading
 * */
   const endLoading = () => {
    loadingInstance.close();
   };

/**
 * @description 显示全屏加载
 * */
   let needLoadingRequestCount = 0;
   export const showFullScreenLoading = () => {
    if (needLoadingRequestCount === 0) {
    startLoading();
    }
    needLoadingRequestCount++;
   };

/**
 * @description 隐藏全屏加载
 * */
   export const tryHideFullScreenLoading = () => {
    if (needLoadingRequestCount <= 0) return;
    needLoadingRequestCount--;
    if (needLoadingRequestCount === 0) {
    endLoading();
    }
   };

使用示例

import { showFullScreenLoading, tryHideFullScreenLoading } from './loading';

//在需要显示loading的地方调用
showFullScreenLoading();

//在需要隐藏loading的地方调用
tryHideFullScreenLoading()

element plus中的loading有自己的样式,一般不需要自定义样式,具体可以参考element plus官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值