React+Antd全局加載遮罩工具

下面是全局加載遮罩工具,功能:提供show和showWithDelay/hide方法用于顯示/延時顯示/隱藏遮罩,它還提供loading屬性返回是否正在loading。通常用于耗時較長的操作,比如遠端api調用。

如何用它,下面是個例子,這個是全局的postAction:

import loadingMask from './loadingMask';
...
// 設置延遲顯示加載遮罩(1秒后顯示)loadingMask.showWithDelay('請求處理中,請稍候...', 1000);return axios({url: url,method: 'post',data: parameter,headers: { ...signHeader, ...config.headers },...config}).then(res => {// 請求完成后隱藏加載遮罩loadingMask.hide();return handleResponse(res);}).catch(err => {// 請求出錯后隱藏加載遮罩loadingMask.hide();return handleError(err);});

如果想實時獲得它的loading屬性呢?這時候要訂閱它的狀態變化:

const [loading, setLoading] = useState(loadingMask.loading);
// 訂閱 loadingMask 的 loading 狀態變化useEffect(() => {// 訂閱 loading 狀態變化const unsubscribe = loadingMask.subscribeToLoading(setLoading);// 組件卸載時取消訂閱return unsubscribe;}, []);...<Buttonblocktype='submit'color='primary'loading={loading}>刪除選中記錄</Button>

這時候loadingMask的loading狀態變化會立即返回到setLoading,也就會引導起button的重新渲染。

組件代碼如下:

import React from 'react';
import { createRoot } from 'react-dom/client';
import { Mask, SpinLoading } from 'antd-mobile';
import styled from 'styled-components';const LoadingContainer = styled.div`display: flex;flex-direction: column;align-items: center;justify-content: center;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);color: #ffffff;
`;const LoadingText = styled.div`margin-top: 12px;font-size: 14px;
`;/*** 全局加載遮罩工具* 用于在長時間請求時顯示加載遮罩*/
class LoadingMask {constructor() {this.container = null;this.root = null;this.visible = false;this.timeoutId = null;this.loadingText = '正在加載,請稍候...';this._loading = false; // 添加內部 loading 狀態this._listeners = []; // 添加監聽器數組this.init();}/*** 初始化加載遮罩容器*/init() {// 創建容器元素this.container = document.createElement('div');this.container.id = 'global-loading-mask-container';document.body.appendChild(this.container);// 創建React 18的rootthis.root = createRoot(this.container);// 初始渲染this.render();}/*** 渲染加載遮罩*/render() {if (!this.root) {this.init();return;}this.root.render(<Mask opacity={0.7} visible={this.visible}><LoadingContainer><SpinLoading color='white' style={{ '--size': '48px' }} /><LoadingText>{this.loadingText}</LoadingText></LoadingContainer></Mask>);}/*** 顯示加載遮罩* @param {string} text - 加載提示文本*/show(text) {this.loadingText = text || '正在加載,請稍候...';this.visible = true;this._setLoading(true); // 使用新方法設置 loading 狀態this.render();}/*** 隱藏加載遮罩*/hide() {this.visible = false;this._setLoading(false); // 使用新方法設置 loading 狀態this.render();// 清除定時器if (this.timeoutId) {clearTimeout(this.timeoutId);this.timeoutId = null;}}/*** 設置延遲顯示加載遮罩* @param {string} text - 加載提示文本* @param {number} delay - 延遲時間(毫秒)*/showWithDelay(text, delay = 1000) {// 清除之前的定時器if (this.timeoutId) {clearTimeout(this.timeoutId);}// 立即設置 loading 狀態為 truethis.loadingText = text || '正在加載,請稍候...';this._setLoading(true); // 使用新方法設置 loading 狀態// 設置新的定時器,只延遲顯示遮罩this.timeoutId = setTimeout(() => {this.visible = true;this.render();}, delay);}// 添加設置 loading 狀態的方法,并通知監聽器_setLoading(value) {if (this._loading !== value) {this._loading = value;// 通知所有監聽器this._listeners.forEach(listener => listener(value));}};// 添加訂閱方法subscribeToLoading(callback) {this._listeners.push(callback);// 立即通知當前狀態callback(this._loading);// 返回取消訂閱的函數return () => {this._listeners = this._listeners.filter(cb => cb !== callback);};};
}// 創建單例實例
const loadingMask = new LoadingMask();// 添加 loading 屬性的 getter
Object.defineProperty(loadingMask, 'loading', {get: function() {return this._loading;}
});export default loadingMask;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84868.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84868.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84868.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【機器學習基礎】機器學習入門核心算法:GBDT(Gradient Boosting Decision Tree)

機器學習入門核心算法&#xff1a;GBDT&#xff08;Gradient Boosting Decision Tree&#xff09; 1. 算法邏輯2. 算法原理與數學推導2.1 目標函數2.2 負梯度計算2.3 決策樹擬合2.4 葉子權重計算2.5 模型更新 3. 模型評估評估指標防止過擬合 4. 應用案例4.1 金融風控4.2 推薦系…

水墨色調中國風PPT模版分享

水墨色調中國風PPT模版分享&#xff1a;水墨中國風PPT模版https://pan.quark.cn/s/4368c537b1d2 第一套PPT模版?&#xff1a;主題是“愛蓮說”&#xff0c;水墨風格封面。核心視覺是綠色蓮蓬、白鶴、紅色印章&#xff0c;文字有“愛蓮說”等。適用文學或傳統文化類演示。 ?第…

PBX、IP PBX、FXO 、FXS 、VOIP、SIP 的概念解析以及關系

PBX&#xff08;Private Branch Exchange&#xff09; 概念 &#xff1a;PBX 是專用交換機&#xff0c;是一種在企業或組織內部使用的電話交換系統。它允許內部用戶之間以及內部用戶與外部公共電話網絡&#xff08;PSTN&#xff09;之間進行通信。例如&#xff0c;在一個大型企…

LabVIEW雙光子熒光成像軟件開發

雙光子熒光成像技術在抑郁小鼠腦內丙二醛&#xff08;MDA&#xff09;和甲醛&#xff08;FA&#xff09;檢測中的軟件開發&#xff0c;基于 LabVIEW 平臺構建從硬件控制、數據采集到圖像處理的全流程系統。結合 5734 FPGA 實現實時圖像處理&#xff0c;突出雙光子成像的深度開發…

OSI模型中的網絡協議

一、電子郵件協議&#xff1a;從SMTP到MIME的擴展 電子郵件系統的核心協議包括SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;、POP3&#xff08;Post Office Protocol&#xff09;和IMAP&#xff08;Internet Message Access Protocol&#xff09;&#xff0c;但…

流程自動化引擎:讓業務自己奔跑

在當今競爭激烈的商業環境中&#xff0c;企業面臨著快速變化的市場需求、日益復雜的業務流程以及不斷增長的運營成本。如何優化業務流程、提升效率并降低成本&#xff0c;成為企業持續發展的關鍵問題。 流程自動化引擎&#xff08;Process Automation Engine&#xff09;作為一…

DNS解析過程以及使用的協議名稱

DNS&#xff08;Domain Name System 域名系統&#xff09;解析是一個分層查詢的過程 1.本地緩存查詢階段 先檢查瀏覽器自身的DNS緩存 接著檢查操作系統的DNS緩存 最后檢查本地 hosts 文件 2.本地DNS服務器查詢階段 先向本地DNS服務器查詢&#xff0c;協議是 DNS over UDP&a…

思澈科技助力Keep Watch Pilot 1:重新定義智能運動手表體驗

——以創新芯片技術&#xff0c;打造長續航、高性能的隨身運動教練 作為智能穿戴領域的核心技術支持者&#xff0c;思澈科技攜手Keep共同推出全新智能運動手表Keep Watch Pilot 1。該產品搭載思澈科技自主研發的SF32LB557芯片&#xff0c;在高性能顯示、超長續航與精準運動監測…

github actions入門指南

GitHub Actions 是 GitHub 提供的持續集成和持續交付&#xff08;CI/CD&#xff09;平臺&#xff0c;允許開發者自動化軟件工作流程&#xff08;如構建、測試、部署&#xff09;。以下是詳細介紹&#xff1a; 一、核心概念 Workflow&#xff08;工作流程&#xff09; 持續集成的…

Pytorch中一些重要的經典操作和簡單講解

Pytorch中一些重要的經典操作和簡單講解&#xff1a; 形狀變換操作 reshape() / view() import torchx torch.randn(2, 3, 4) print(f"原始形狀: {x.shape}")# reshape可以處理非連續張量 y x.reshape(6, 4) print(f"reshape后: {y.shape}")# view要求…

ubuntu下nginx

我用的是ubuntu22 配置文件的準確位置 靜態網頁的存放位置 放大看到在靜態文件部署的配置路徑 該路徑下面有一個default文件查看 針對上圖的解析如下&#xff1a; 找到root /var/www/html 我嘗試把自己的一個index文件設置為默認&#xff0c;復制到/var/www/html下 ctrl加…

Git使用手冊保姆級教程

Git 使用手冊 一、Git 簡介與安裝 什么是Git&#xff1f; ? Git 是一個分布式版本控制系統&#xff0c;用于跟蹤文件變化&#xff0c;支持多人協作開發。 安裝步驟 ? Windows&#xff1a;通過 Git官網 下載安裝包&#xff0c;按默認配置安裝即可。 ? macOS&#xff1a…

k8s Headless Service

Kubernetes 無頭服務&#xff08;Headless Service&#xff09;配置與使用場景 1.無頭服務概述 無頭服務&#xff08;Headless Service&#xff09;是 Kubernetes 中的一種特殊服務類型&#xff0c;它**不分配集群 IP&#xff08;ClusterIP&#xff09;&#xff0c;而是直接暴露…

基本面高股息策略

策略概述 一種基于基本面高股息策略的投資策略,主要通過Python在聚寬平臺上實現。該策略的核心思想是通過篩選出具有優質基本面和高股息率的股票進行投資,以期獲得穩定的長期回報。策略包括以下幾個主要步驟: 1. 初始化與參數設置:定義策略的基本參數和回測設置。 2. 每日…

GaussDB資源凍結與解凍:精細化資源管理的實踐與策略

GaussDB資源凍結與解凍&#xff1a;精細化資源管理的實踐與策略 引言 在云計算環境中&#xff0c;數據庫資源的動態調配能力直接影響業務成本與穩定性。華為云GaussDB作為新一代分布式數據庫&#xff0c;通過??資源凍結&#xff08;Resource Quota Freeze&#xff09;??與…

設計模式24——訪問者模式

寫文章的初心主要是用來幫助自己快速的回憶這個模式該怎么用&#xff0c;主要是下面的UML圖可以起到大作用&#xff0c;在你學習過一遍以后可能會遺忘&#xff0c;忘記了不要緊&#xff0c;只要看一眼UML圖就能想起來了。同時也請大家多多指教。 訪問者模式&#xff08;Visito…

cuda編程筆記(2)--傳遞參數、設備屬性

以下是最簡單的帶參數的核函數使用過程&#xff1a; #include<iostream> #include<cstdio> #include "cuda_runtime.h" #include "device_launch_parameters.h" __global__ void add(int a,int b,int *c) {*c a b; } int main() {int c;int…

C# WinForm應用程序多語言實現全面指南

目錄 引言 一、多語言實現基礎概念 1.1 多語言實現的核心原理 1.2 .NET本地化支持機制 二、基于XML的多語言實現方案 2.1 方案概述 2.2 XML文件結構示例 2.3 實現步驟 2.4 優缺點分析 三、基于.resx資源文件的多語言實現 3.1 方案概述 3.2 實現步驟 3.3 資源文件結…

Python爬蟲實戰:研究Playwright框架相關技術

1 引言 1.1 研究背景與意義 網絡爬蟲作為一種自動獲取互聯網信息的技術,在數據采集、信息監測、競爭情報等領域具有廣泛應用。隨著 Web 技術的發展,越來越多的網站采用 JavaScript 動態渲染技術,傳統爬蟲工具難以有效獲取完整的頁面內容。Playwright 作為新一代自動化測試…

中企出海大會|打造全球化云計算一張網,云網絡助力中企出海和AI創新

全球化是阿里云的長期戰略&#xff0c;未來阿里云將持續加大云和 AI 基礎設施建設投入。首先是加速打造全球化的云計算網絡&#xff0c;一張具備 AI技術服務能力和全球競爭力的云計算網絡是阿里云的長期目標。 —— 阿里巴巴集團 CEO、阿里云智能集團董事長兼 CEO 吳泳銘 5 月 …