当前位置:首页 > React

react 实现进度条

2026-01-27 11:12:47React

使用 React 实现进度条

使用原生 HTML5 <progress> 元素

React 可以直接渲染 HTML5 的 <progress> 元素,适用于简单的进度展示:

function ProgressBar({ value, max = 100 }) {
  return <progress value={value} max={max} />;
}
// 使用方式
<ProgressBar value={30} />

基于 CSS 的样式化进度条

通过 div 和 CSS 实现更灵活的样式控制:

react 实现进度条

function StyledProgressBar({ percentage }) {
  return (
    <div style={{ width: '100%', backgroundColor: '#e0e0e0', borderRadius: 5 }}>
      <div 
        style={{ 
          width: `${percentage}%`, 
          backgroundColor: '#4CAF50',
          height: 20,
          borderRadius: 5,
          transition: 'width 0.3s ease'
        }}
      />
    </div>
  );
}
// 使用方式
<StyledProgressBar percentage={75} />

使用第三方库(react-progressbar)

对于更复杂的需求,可以使用专门库如 react-progressbar

npm install react-progressbar

实现代码:

react 实现进度条

import ProgressBar from 'react-progressbar';

function CustomProgress() {
  return <ProgressBar completed={60} />;
}

动画进度条实现

结合 React 状态和 useEffect 实现动画效果:

import { useState, useEffect } from 'react';

function AnimatedProgressBar({ targetPercentage }) {
  const [currentPercentage, setCurrentPercentage] = useState(0);

  useEffect(() => {
    const timer = setInterval(() => {
      setCurrentPercentage(prev => 
        prev >= targetPercentage ? targetPercentage : prev + 1
      );
    }, 30);
    return () => clearInterval(timer);
  }, [targetPercentage]);

  return (
    <div style={{ width: '100%', backgroundColor: '#ddd' }}>
      <div style={{ 
        width: `${currentPercentage}%`, 
        backgroundColor: '#2196F3',
        height: 20,
        textAlign: 'center',
        color: 'white'
      }}>
        {currentPercentage}%
      </div>
    </div>
  );
}
// 使用方式
<AnimatedProgressBar targetPercentage={85} />

圆形进度条实现

使用 SVG 实现圆形进度条:

function CircularProgress({ radius = 50, strokeWidth = 10, progress }) {
  const normalizedRadius = radius - strokeWidth * 2;
  const circumference = normalizedRadius * 2 * Math.PI;
  const strokeDashoffset = circumference - (progress / 100) * circumference;

  return (
    <svg height={radius * 2} width={radius * 2}>
      <circle
        stroke="#ddd"
        fill="transparent"
        strokeWidth={strokeWidth}
        r={normalizedRadius}
        cx={radius}
        cy={radius}
      />
      <circle
        stroke="#4CAF50"
        fill="transparent"
        strokeWidth={strokeWidth}
        strokeDasharray={circumference + ' ' + circumference}
        style={{ strokeDashoffset }}
        r={normalizedRadius}
        cx={radius}
        cy={radius}
      />
      <text 
        x="50%" 
        y="50%" 
        textAnchor="middle" 
        dy=".3em"
        fill="#333"
      >
        {progress}%
      </text>
    </svg>
  );
}
// 使用方式
<CircularProgress progress={65} />

关键注意事项

  • 动态进度更新时建议添加 CSS transition 属性实现平滑动画
  • 确保进度值始终在 0 到 100 之间(或自定义的 max 值范围内)
  • 考虑添加 ARIA 属性提升无障碍体验:
    <div 
    role="progressbar" 
    aria-valuenow={percentage}
    aria-valuemin="0"
    aria-valuemax="100"
    >
    {percentage}%
    </div>

标签: 进度条react
分享给朋友:

相关文章

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react 如何调试

react 如何调试

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

react如何调度

react如何调度

React 调度机制概述 React 的调度机制通过 Fiber 架构 和 Scheduler 模块实现任务优先级管理与时间切片(Time Slicing),确保高优先级更新(如用户交互)能快速响应,…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

如何外部访问react

如何外部访问react

外部访问 React 应用的方法 配置代理服务器 在开发环境中,可以通过配置代理服务器解决跨域问题。修改 package.json 文件,添加 proxy 字段指向后端 API 地址: "proxy…

react如何修改值

react如何修改值

修改 React 组件的值 在 React 中修改值通常涉及状态管理。根据组件的类型(类组件或函数组件)和状态管理方式(本地状态或全局状态),方法有所不同。 使用 useState(函数组件) 在函…