当前位置:首页 > 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 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react如何通信

react如何通信

React 组件通信方式 React 组件间的通信方式多样,具体选择取决于组件关系和场景需求。以下是常见方法: 父子组件通信 父组件通过 props 向子组件传递数据,子组件通过回调函数通知父组件…

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…

odyssey react 如何

odyssey react 如何

Odyssey React 是耐克推出的一款跑鞋系列,以其轻量化设计和React泡沫缓震技术著称。以下是关于该系列鞋款的主要特点和使用建议: 核心特点 React泡沫中底提供出色的能量回馈和缓震效果…

react 如何修改state

react 如何修改state

修改 state 的基础方法 在 React 中,state 的修改必须通过 setState 方法(类组件)或 state 更新函数(函数组件)。直接修改 state 会导致组件不会重新渲染,且可能…

react如何重写alert

react如何重写alert

重写 React 中的 alert 方法 在 React 中,直接使用原生 alert 会破坏用户体验,通常需要自定义弹窗组件替代。以下是实现方法: 使用自定义弹窗组件 创建可复用的弹窗组件,替代原…