当前位置:首页 > 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
分享给朋友:

相关文章

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用axios拦截器和第三方库如NProgress。以下是具体实现方法: 使用axios拦截器配合NProgress 安装…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gr…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yar…