当前位置:首页 > React

react如何控制loading状态

2026-02-26 18:56:57React

控制Loading状态的常见方法

在React中,控制loading状态通常通过组件状态管理实现,以下是几种常用方式:

使用useState钩子

import { useState } from 'react';

function DataFetcher() {
  const [isLoading, setIsLoading] = useState(false);
  const [data, setData] = useState(null);

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

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

使用自定义Hook封装

react如何控制loading状态

function useAsync(asyncFunction) {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [result, setResult] = useState(null);

  const execute = async (...args) => {
    try {
      setLoading(true);
      const data = await asyncFunction(...args);
      setResult(data);
      setLoading(false);
    } catch (err) {
      setError(err);
      setLoading(false);
    }
  };

  return { execute, loading, error, result };
}

高级状态管理方案

结合Context API

const LoadingContext = createContext();

function LoadingProvider({ children }) {
  const [loadingCount, setLoadingCount] = useState(0);

  const value = {
    isLoading: loadingCount > 0,
    startLoading: () => setLoadingCount(c => c + 1),
    stopLoading: () => setLoadingCount(c => Math.max(0, c - 1))
  };

  return (
    <LoadingContext.Provider value={value}>
      {children}
    </LoadingContext.Provider>
  );
}

Redux方案

react如何控制loading状态

// actions.js
export const startLoading = () => ({ type: 'START_LOADING' });
export const stopLoading = () => ({ type: 'STOP_LOADING' });

// reducer.js
export default function loadingReducer(state = false, action) {
  switch(action.type) {
    case 'START_LOADING': return true;
    case 'STOP_LOADING': return false;
    default: return state;
  }
}

优化用户体验的技巧

延迟显示加载指示器 快速响应时避免闪烁,可使用setTimeout延迟显示:

useEffect(() => {
  const timer = setTimeout(() => {
    if (isLoading) setShowLoader(true);
  }, 300);

  return () => clearTimeout(timer);
}, [isLoading]);

骨架屏(Skeleton Screen) 在数据加载前预渲染内容轮廓:

function Skeleton() {
  return (
    <div className="skeleton">
      <div className="skeleton-header" />
      <div className="skeleton-content" />
    </div>
  );
}

并发模式下的Suspense React 18+推荐方式:

<Suspense fallback={<Spinner />}>
  <AsyncComponent />
</Suspense>

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

相关文章

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高 React Native 允许开发者使用 JavaScript 和 React 编写代码,同时生成 iOS 和 Android 应用,大幅减少开发成…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react 如何调试

react 如何调试

调试 React 应用的方法 使用 React Developer Tools 安装 Chrome 或 Firefox 的 React Developer Tools 扩展,可以检查组件树、状态和 p…

如何开发react

如何开发react

开发React应用的基本步骤 安装Node.js和npm 确保系统中已安装Node.js(包含npm)。可通过官网下载安装包,安装后验证版本: node -v npm -v 创建React项目…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react…