当前位置:首页 > 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 封装逻辑

react如何控制loading状态

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 状态管理:

react如何控制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 实现组件级加载:

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

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

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

相关文章

react如何记忆

react如何记忆

React 记忆技术 在 React 中,记忆(Memoization)是一种优化技术,用于避免不必要的重新渲染或计算。React 提供了多种内置方法和第三方库来实现记忆功能。 useMemo H…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

如何选购react

如何选购react

选购 React 相关产品或服务的建议 React 是一个用于构建用户界面的 JavaScript 库,广泛应用于前端开发。以下是选购 React 相关产品(如课程、书籍、工具、组件库等)的参考方法:…

如何下载react

如何下载react

下载 React 的方法 通过 npm 或 yarn 安装 React 可以通过包管理器 npm 或 yarn 安装。确保已安装 Node.js(包含 npm),然后在项目目录中运行以下命令:…

react如何衰减

react如何衰减

React 中的动画衰减效果实现 在 React 中实现衰减效果(如滚动衰减、拖动释放后的惯性滑动)通常需要结合物理动画原理或第三方动画库。以下是几种常见方法: 使用 CSS 动画和 @keyf…

react如何读

react如何读

React 的发音 React 的发音为 /riˈækt/(音标),读作“瑞-艾克特”。其中: “Re” 发音类似英文单词 “read” 的开头部分。 “act” 发音与英文单词 “act” 一致。…