ant-design Progress 分段进度实战:用 success 属性细化进度的多层语义

发布时间:2026/9/8 21:23:29

ant-design Progress 分段进度实战:用 success 属性细化进度的多层语义
ant-design Progress 分段进度实战用 success 属性细化进度的多层语义【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/GitHub_Trending/an/ant-design本篇指南基于 ant-design 的Progress分段进度示例segment demo展开讲解如何通过percent与success两个属性在同一个进度条中同时表达“进行中”与“已完成”两类语义并适用于 line、circle、dashboard 三种形态。读完本文你将掌握该 demo 的完整代码用法、success属性的类型定义与解析逻辑以及从Line.tsx、Circle.tsx源码层面理解分段渲染的实现原理。示例定位为什么需要分段进度官方示例文档 components/progress/demo/segment.md 对这一用法的描述只有一句话但信息密度很高中文说明分段展示进度可以用于细化进度语义。英文说明Show several parts of progress with different status.“细化进度语义”是核心诉求很多业务场景中一个任务并不是单一维度的 0~100%而是同时存在多个子进度。例如一个部署流程有 10 个阶段其中 3 个已完成、3 个正在执行、4 个待执行。此时单靠一个percent无法表达“完成”与“进行中”的边界而Progress的success属性正是为此设计的percent表示总体进度success.percent表示其中已完成的分段两者叠加后轨道上会呈现出一段成功色绿色 一段进行色主题色的视觉效果。完整示例代码以下是 components/progress/demo/segment.tsx 的完整实现它用同一个数据组合percent{60}success{{ percent: 30 }}演示了三种形态import React from react; import { Flex, Progress, Tooltip } from antd; const App: React.FC () ( Flex gapsmall vertical Tooltip title3 done / 3 in progress / 4 to do Progress percent{60} success{{ percent: 30 }} / /Tooltip Flex gapsmall wrap Tooltip title3 done / 3 in progress / 4 to do Progress percent{60} success{{ percent: 30 }} typecircle / /Tooltip Tooltip title3 done / 3 in progress / 4 to do Progress percent{60} success{{ percent: 30 }} typedashboard / /Tooltip /Flex /Flex ); export default App;代码要点第一个Progress未指定type默认渲染为line线性进度条在 progress.tsx 中type line是解构默认值后两个分别通过typecircle与typedashboard渲染环形与仪表盘形态证明分段语义对三种形态通用每个进度条外层包了一个Tooltip把数字比例翻译成了人类可读的语义3 done / 3 in progress / 4 to do。进度条本身只显示60%这样的单一文本Tooltip 是补充“分段语义”的一种低成本做法。success 属性的定义与参数说明success的类型在 progress.tsx 中定义为export interface SuccessProps { percent?: number; strokeColor?: string; }结合组件 API 文档见 components/progress/index.zh-CN.md 的属性表与分段进度直接相关的参数如下参数说明类型默认值percent当前进度会被截断到 0~100 区间number0success成功进度条相关配置{ percent: number, strokeColor: string }-format内容模板函数可拿到两个入参(percent, successPercent) ReactNode(percent) percent %其中值得注意的三个行为细节format的第二个入参就是successPercent。在 progress.tsx 中indicator 文本通过textFormatter(validProgress(percent), validProgress(successPercent))生成因此你可以自定义文本把两段进度都写出来Progress percent{60} success{{ percent: 30 }} format{(percent, successPercent) ${successPercent}% done / ${percent}% total} /success.strokeColor可单独控制成功段颜色。在 index.test.tsx 中有对应的验证用例Progress percent{60} success{{ percent: 30, strokeColor: #ffffff }} /三种 type 均各有一个用例说明该配置对 line / circle / dashboard 都生效。数值会被夹取clamp到合法区间。utils.ts 中的validProgress会将小于 0 的值归零、大于 100 的值截断为 100因此传入异常数据时不会导致轨道溢出布局。源码剖析一段 success 是如何叠进轨道的百分比解析getPercentage 的双返回值分段的核心换算在 utils.tsexport const getPercentage ({ percent, success }: ProgressProps) { const realSuccessPercent validProgress(getSuccessPercent({ success })); return [realSuccessPercent, validProgress(validProgress(percent) - realSuccessPercent)]; };返回一个二元组[successPercent, percent - successPercent]。也就是说当percent{60} success{{ percent: 30 }}时组件实际按「成功段 30% 进行段 30%」来绘制——进行段的宽度是总进度减去成功段后的剩余部分而不是直接取percent。这保证了成功段不会在进行段之下重复渲染。线性形态双 track 绝对定位叠加Line.tsx 中轨道区域渲染了两条 trackPercent track宽度为validProgress(percent)%颜色取strokeColor支持字符串与渐变对象Success track仅当successPercent ! undefined时渲染宽度为validProgress(successPercent)%带有额外的${prefixCls}-track-success类名颜色取success.strokeColor。两条 track 均为绝对定位样式见 style/index.ts[${componentCls}-track]: { position: absolute }起点相同success track 渲染在 percent track 之后。由于成功段30%总包含在进行段60%之内从视觉上就形成了「绿 0~30% → 主题色 30%~60% → 灰色 60%~100%」的三段式效果。环形形态把两段百分比交给底层 SVG 组件环形与仪表盘形态走 Circle.tsx 的实现思路与线性不同通过getPercentage(props)拿到[successPercent, restPercent]后直接percent{percentArray}传入底层的rc-component/progress的RCCircleCircle.tsx描边颜色同样是一个二元组getStrokeColor返回[successColor || presetPrimaryColors.green, strokeColor]utils.ts默认成功段为绿色green与主题无关可通过success.strokeColor覆盖。因此环形形态下的“分段”本质上是 SVG 描边中一段绿色弧 一段主题色弧仪表盘typedashboard只是在此之上叠加了默认gapDegree 75的缺口见 Circle.tsx。无障碍与状态判定successPercent 会“接管”进度语义有两处容易忽略的逻辑都优先参考successPercentaria-valuenow。在 progress.tsx 中percentNumber的取值为若传入了success则以success.percent为准否则回退到percent。外层div以roleprogressbar暴露给辅助技术progress.tsx。也就是说从屏幕阅读器视角看这个分段进度条报告的是“已完成”的比例。success 状态判定。progress.tsx 中当未显式指定status且percentNumber 100时组件自动置为success状态indicator 显示对勾图标。因为percentNumber优先取successPercent所以是成功段达到 100%才触发 success 状态而非总进度。以上行为的正确性由 components/progress/tests/index.test.tsx 中的测试用例固化// percent100 但 success.percent50 → 不应出现 success 状态 Progress percent{100} success{{ percent: 50 }} / expect(wrapper.querySelectorAll(.ant-progress-status-success)).toHaveLength(0); // success.percent100 → 应出现 success 状态 rerender(Progress percent{50} success{{ percent: 100 }} /); expect(wrapper.querySelectorAll(.ant-progress-status-success)).toHaveLength(1);负数success.percent如success{{ percent: -20 }}也有专门的渲染测试配合validProgress的夹取逻辑保证不产生负宽度的 track。实战建议语义翻译交给 format 或 Tooltipdemo 用Tooltip把30/60/100翻译成 “3 done / 3 in progress / 4 to do”。如果你希望文字常驻显示优先使用format的第二个入参successPercent而不是在外部套 Tooltip这样可以保持line形态下文本跟随轨道对齐的能力percentPosition。注意 success 对状态与 ARIA 的接管如果你的业务里percent恒为 100 而success.percent表示完成比例那么 success 状态的出现时机由success.percent决定且aria-valuenow报告的是success.percent。成功段颜色默认绿色环形形态下默认值来自presetPrimaryColors.green与全局主题色解耦需要与主题统一时用success.strokeColor显式指定。三种形态共用同一套数据模型line 靠双 track 叠加circle / dashboard 靠双颜色描边弧但percent与success.percent的语义完全一致切换type无需改动数据层。参考文件示例说明文档components/progress/demo/segment.md示例代码components/progress/demo/segment.tsx组件主实现components/progress/progress.tsx百分比工具函数components/progress/utils.ts线性渲染components/progress/Line.tsx环形渲染components/progress/Circle.tsx样式实现components/progress/style/index.ts测试用例components/progress/tests/index.test.tsx组件 API 文档components/progress/index.zh-CN.md【免费下载链接】ant-designAn enterprise-class UI design language and React UI library项目地址: https://gitcode.com/GitHub_Trending/an/ant-design创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

MicroDuck拆解:低成本软体机器人Sim2Real强化学习与真机部署

MicroDuck拆解:低成本软体机器人Sim2Real强化学习与真机部署

2026/9/8 21:13:29

这两年机器人圈里最火的一个视频,我觉得不是波士顿动力那个翻跟头,而是 DeepMind 开源的 MicroDuck。一只折纸一样的小鸭子,399 美元的物料成本,四条腿是用形状记忆合金丝拉动的,走的步子却又稳又快,关键是…

视频批量下载完整指南:如何用 res-downloader 十分钟收集跨平台视频素材

视频批量下载完整指南:如何用 res-downloader 十分钟收集跨平台视频素材

2026/9/8 21:13:29

视频批量下载完整指南:如何用 res-downloader 十分钟收集跨平台视频素材 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloade…

7.1 AMDGPU页表机制概览

7.1 AMDGPU页表机制概览

2026/9/8 21:13:29

在理解了 amdgpu_bo 的物理地址和虚拟地址后,最后就差怎么把这两者关联起来了,这就是 GPU 页表。 本文从构建和更新 GPU 页表的视角,分析虚拟地址和物理地址分配到页表项写入页表的全流程中的关键概念和操作。这是对 amdgpu_bo 的管理和使用的另一个视角理解,不要错过。 1…

主动声纳目标检测仿真:从声纳方程到CFAR的MATLAB实现

主动声纳目标检测仿真:从声纳方程到CFAR的MATLAB实现

2026/9/8 22:13:31

简介:这是一份基于MATLAB的主动声纳水下目标检测仿真示例,面向信号处理与声纳系统方向的学习者,重点演示浅水多径环境中目标回波的建模与检测流程。压缩包内共6个文件,其中4个.m脚本分别实现主程序、多径信道构造、路径绘制和球形…

Maven构建遭遇IndexOutOfBoundsException?资源过滤阶段排查全解析

Maven构建遭遇IndexOutOfBoundsException?资源过滤阶段排查全解析

2026/9/8 22:13:31

如果你在IDEA里点开Build按钮,看到控制台刷出这样一行: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project ruoyi-modules-wkzyMicro-driver: maven-resources-produc…

AD9959四通道DDS信号源:驱动设计、硬件布局与调试指南

AD9959四通道DDS信号源:驱动设计、硬件布局与调试指南

2026/9/8 22:13:31

简介:面向电子、通信、自动化等专业的DDS AD9959完整开发资料包,适合毕业设计、课程设计或期末大作业场景。资料包集成基于Altium Designer 19的硬件设计文件、C语言驱动程序与说明文档,驱动实现点频输出,可独立配置各通道相位与幅…

Claude Code启动全攻略:环境检查、常见报错与性能调优

Claude Code启动全攻略:环境检查、常见报错与性能调优

2026/9/8 22:13:31

1. 启动前的基础准备:先把地基打牢很多人拿到 Claude Code 第一反应就是装上直接跑,结果在启动环节就卡住了。我见过不少人卡在 Node.js 版本不对、npm 权限报错、甚至是网络代理没关这种最基础的问题上。说句实在话,启动这一步虽然看起来只是…

串口屏控制步进电机:STM32 HAL库与USART指令完整实现

串口屏控制步进电机:STM32 HAL库与USART指令完整实现

2026/9/8 22:13:31

简介:STM32电机控制例程第八期,是一套基于HAL库的串口屏控制步进电机完整项目,面向嵌入式初学者与电机控制开发者,重点演示如何通过USART接口接收HMI人机界面指令,解析速度、方向、启停等控制参数,再生成脉…

SSM框架小区人口管理系统设计与实现:从环境搭建到核心代码解析

SSM框架小区人口管理系统设计与实现:从环境搭建到核心代码解析

2026/9/8 22:03:31

简介:这是一份基于SSM(SpringSpringMVCMyBatis)架构的小区人口管理系统毕业设计程序,面向需要完成Java Web课程设计或毕业设计的计算机专业学生。系统涵盖用户管理、费用信息、疫情黑名单、出入登记等核心业务模块,从需…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/7 20:21:46

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/8 4:55:53

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/7 8:03:37

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

芯片良率波动可视化:动画拆解工艺因果,重建客户信任

芯片良率波动可视化:动画拆解工艺因果,重建客户信任

2026/9/8 0:02:30

芯片这个行业有个不太被人摆到台面上、但几乎每天都在发生的场景:客户拿着一条良率曲线截图问你,这批货的良率怎么掉了三个点,是不是工艺出问题了,产生的不良会不会流到他们产线上去。你解释了半天,客户似懂非懂&#…

PyTorch DataLoader参数冲突:sampler与shuffle互斥的根源与正确写法

PyTorch DataLoader参数冲突:sampler与shuffle互斥的根源与正确写法

2026/9/8 0:02:30

ValueError: sampler option is mutually exclusive with shuffle,这个报错我在 PyTorch 的 DataLoader 上至少见过几十次了,而且很有意思的是,它经常不是新手专属——很多写了好几年模型的老手,在从单机改成自定义采样器&#xf…

中国车企再破谣言,GAC吉利零跑获欧盟安全五星

中国车企再破谣言,GAC吉利零跑获欧盟安全五星

2026/9/8 0:02:30

有人可能在网上开着皮卡拍视频,声称中国电动车不仅性能不如美国大排量车型,安全性也堪忧。然而事实恰恰相反,GAC、吉利和零跑最新推出的电动车型在极为严苛的欧盟新车安全评鉴(Euro NCAP)测试中全部斩获满分。就在特斯…

远程协作的工作台整理

远程协作的工作台整理

2026/9/8 4:23:39

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/8 3:19:39

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/8 4:00:23

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…