当前位置:首页 > React

react如何控制loading状态

2026-01-24 05:00:44React

控制 Loading 状态的方法

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

使用 useState 钩子管理状态

import { useState } from 'react';

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

  const fetchData = async () => {
    setIsLoading(true);
    try {
      const response = await fetch('api/data');
      const data = await response.json();
    } finally {
      setIsLoading(false);
    }
  };

  return (
    <div>
      {isLoading ? <div>Loading...</div> : <div>Content</div>}
    </div>
  );
}

使用自定义 Hook 封装逻辑

function useLoading() {
  const [isLoading, setState] = useState(false);
  const load = async (promise) => {
    setState(true);
    try {
      await promise;
    } finally {
      setState(false);
    }
  };
  return [isLoading, load];
}

function MyComponent() {
  const [isLoading, load] = useLoading();

  const handleClick = () => load(fetchData());
}

结合 Context 全局管理

const LoadingContext = createContext();

function LoadingProvider({ children }) {
  const [isLoading, setIsLoading] = useState(false);
  const value = { isLoading, setIsLoading };
  return <LoadingContext.Provider value={value}>{children}</LoadingContext.Provider>;
}

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

使用第三方库 如 react-query 等库内置了 loading 状态管理:

import { useQuery } from 'react-query';

function MyComponent() {
  const { isLoading, data } = useQuery('data', fetchData);
  return isLoading ? <Spinner /> : <DataView data={data} />;
}

优化 Loading 体验的技巧

防闪烁处理 对于快速完成的请求,可以设置最小显示时间避免闪烁:

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

useEffect(() => {
  let timer;
  if (isLoading) {
    timer = setTimeout(() => setIsLoading(false), 500);
  }
  return () => clearTimeout(timer);
}, [isLoading]);

骨架屏(Skeleton)替代 比简单文字提示更友好的加载方式:

{isLoading ? <Skeleton height={100} /> : <RealContent />}

按需加载组件 配合 React.lazy 实现组件级加载:

react如何控制loading状态

const LazyComponent = lazy(() => import('./LazyComponent'));

function MyComponent() {
  return (
    <Suspense fallback={<LoadingSpinner />}>
      <LazyComponent />
    </Suspense>
  );
}

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

相关文章

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

uniapp改变checkbox选中状态

uniapp改变checkbox选中状态

修改 checkbox 选中状态的方法 在 uniapp 中修改 checkbox 的选中状态可以通过以下几种方式实现: 绑定 v-model 控制状态 通过数据绑定方式控制 checkbox 的…

vscode如何配置react

vscode如何配置react

配置 VSCode 进行 React 开发 安装必要插件 ES7+ React/Redux/React-Native snippets:提供 React 代码片段快速生成功能。 Prettier -…

如何设计react组件

如何设计react组件

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

react如何减少伤害

react如何减少伤害

减少 React 应用性能伤害的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行浅比较,避免不必要的重新渲染。类组件可以使用 PureC…

react elementUI

react elementUI

React 和 Element UI 是两个不同的技术栈,但可以通过整合实现类似功能。以下是相关解决方案和替代方案: React 与 Element UI 的替代方案 Element UI 是为 V…