当前位置:首页 > React

react如何控制loading状态

2026-03-31 12:29:37React

控制 Loading 状态的方法

在 React 中,可以通过多种方式控制 loading 状态,以下是常见的实现方法:

使用 useState 管理状态 通过 useState 钩子定义一个布尔值状态变量,用于表示 loading 的状态。

import { useState } from 'react';

function MyComponent() {
  const [isLoading, setIsLoading] = useState(false);

  const fetchData = async () => {
    setIsLoading(true);
    try {
      const response = await fetch('https://api.example.com/data');
      const data = await response.json();
    } catch (error) {
      console.error(error);
    } finally {
      setIsLoading(false);
    }
  };

  return (
    <div>
      {isLoading ? <div>Loading...</div> : <button onClick={fetchData}>Load Data</button>}
    </div>
  );
}

使用自定义 Hook 可以封装一个自定义 Hook 来复用 loading 逻辑。

react如何控制loading状态

function useLoading() {
  const [isLoading, setIsLoading] = useState(false);

  const startLoading = () => setIsLoading(true);
  const stopLoading = () => setIsLoading(false);

  return { isLoading, startLoading, stopLoading };
}

function MyComponent() {
  const { isLoading, startLoading, stopLoading } = useLoading();

  const fetchData = async () => {
    startLoading();
    try {
      const response = await fetch('https://api.example.com/data');
      const data = await response.json();
    } catch (error) {
      console.error(error);
    } finally {
      stopLoading();
    }
  };
}

结合 Context API 如果需要在多个组件间共享 loading 状态,可以使用 Context API。

import { createContext, useContext, useState } from 'react';

const LoadingContext = createContext();

function LoadingProvider({ children }) {
  const [isLoading, setIsLoading] = useState(false);

  const value = { isLoading, setIsLoading };
  return <LoadingContext.Provider value={value}>{children}</LoadingContext.Provider>;
}

function useLoadingContext() {
  return useContext(LoadingContext);
}

function MyComponent() {
  const { isLoading, setIsLoading } = useLoadingContext();

  const fetchData = async () => {
    setIsLoading(true);
    try {
      const response = await fetch('https://api.example.com/data');
      const data = await response.json();
    } catch (error) {
      console.error(error);
    } finally {
      setIsLoading(false);
    }
  };
}

使用第三方库 一些第三方库(如 react-queryswr)内置了 loading 状态管理功能。

react如何控制loading状态

import { useQuery } from 'react-query';

function MyComponent() {
  const { isLoading, data } = useQuery('fetchData', () =>
    fetch('https://api.example.com/data').then(res => res.json())
  );

  return isLoading ? <div>Loading...</div> : <div>{data}</div>;
}

优化用户体验

添加延迟加载 为了避免闪烁,可以设置一个最小 loading 时间。

const fetchData = async () => {
  const startTime = Date.now();
  setIsLoading(true);
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    const elapsedTime = Date.now() - startTime;
    if (elapsedTime < 500) {
      await new Promise(resolve => setTimeout(resolve, 500 - elapsedTime));
    }
  } catch (error) {
    console.error(error);
  } finally {
    setIsLoading(false);
  }
};

使用动画或骨架屏 替换简单的 "Loading..." 文本,提升用户体验。

import { Skeleton } from 'antd';

function MyComponent() {
  const [isLoading, setIsLoading] = useState(false);

  return (
    <div>
      {isLoading ? (
        <Skeleton active />
      ) : (
        <button onClick={() => setIsLoading(true)}>Load Data</button>
      )}
    </div>
  );
}

注意事项

  • 确保在 finally 块中重置 loading 状态,避免因错误导致状态卡住。
  • 对于复杂的应用,考虑使用状态管理库(如 Redux)集中管理 loading 状态。
  • 避免过度使用 loading 状态,仅在必要操作时显示。

标签: 状态react
分享给朋友:

相关文章

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react 如何debug

react 如何debug

React 调试方法 使用 React Developer Tools React Developer Tools 是浏览器扩展,支持 Chrome 和 Firefox。安装后,可以在开发者工具中查看…

react如何建项目

react如何建项目

创建React项目的几种方法 使用官方工具Create React App(CRA) npx create-react-app my-app 这条命令会创建一个名为my-app的新React项目,包含…

react如何创建框架

react如何创建框架

React 创建框架的方法 React 本身是一个用于构建用户界面的 JavaScript 库,但可以通过多种方式创建框架或项目结构。以下是几种常见的方法: 使用 Create React App…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…

react如何用echarts

react如何用echarts

在React中使用ECharts 安装ECharts和React专用封装库: npm install echarts echarts-for-react 基础使用示例 创建一个基础的柱状图组件:…