RSuite ProgressCircle 的 showInfo 属性:控制环形进度条中心信息显示的完整指南
前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载本篇文章围绕 RSuite 组件库中ProgressCircle环形进度条的showInfo属性展开结合仓库中的组件官方文档与源码实现系统讲解该属性如何控制环形中心百分比文字的显示与隐藏并延伸介绍与之配套的renderInfo、status、percent等属性及底层渲染原理。读完本文你将掌握在真实业务场景中灵活开关、定制环形进度条信息区的完整实战方案。一、showInfo 是做什么的ProgressCircle是 RSuite 提供的环形进度指示组件用于展示某个操作的完成进度。默认情况下组件会在圆环中心显示当前百分比文本如30%。showInfo属性就是控制这段中心文字是否渲染的开关showInfo{true}默认值渲染中心信息区显示百分比文本或状态图标showInfo{false}完全隐藏中心信息区只保留圆环本身适合需要纯图形化展示的场景如仪表盘背景装饰、只靠颜色传达进度的场景。从源码看该属性的默认值为true并通过条件渲染控制信息区挂载与否// src/ProgressCircle/ProgressCircle.tsx const { ... showInfo true, ... } propsWithDefaults; return ( Box roleprogressbar ... {showInfo ( ProgressInfo percent{totalPercent} renderInfo{renderInfo} status{status} classPrefix{classPrefix} / )} svg className{prefix(svg)} viewBox0 0 100 100 width{width} ... /svg /Box );可以看到showInfo为false时ProgressInfo组件根本不会被挂载因此中心区域也不会占用视觉空间。二、官方示例开与关的直观对比官方 show-info 示例用最简单的方式演示了两个并排圆环的差异import { ProgressCircle, HStack } from rsuite; const App () ( HStack spacing{20} ProgressCircle percent{30} showInfo{true} w{100} / ProgressCircle percent{30} showInfo{false} w{100} / /HStack );两个圆环的percent均为 30、直径w均为 100唯一的区别是showInfo取值不同左侧圆环中心显示30%右侧圆环中心为空白仅保留外圈弧线。这是验证该属性行为最直接的用例可直接在任意 React 项目中运行。三、配套属性总览官方 Props 表要让showInfo真正服务于业务通常需要与其他属性配合。以下是官方文档中ProgressCircle的完整属性表默认值与取值说明已保留属性类型说明默认值版本classPrefixstring组件 CSS 类名前缀progressgapDegreenumber圆环缺口角度取值 0 ~ 3600gapPositionright \| top \| bottom \| left圆环缺口位置toppercentnumber进度百分比0renderInfo(percent, status?) ReactNode信息区自定义渲染函数—6.0.0showInfoboolean是否显示文本truestatussuccess \| fail \| active进度状态—sections{ percent, color }[]多分段不同颜色—6.0.0strokeColorstring进度弧线颜色—strokeLinecapround \| square \| butt开放路径端点形状roundstrokeWidthnumber弧线宽度6trailColorstring轨道背景弧颜色—trailWidthnumber轨道宽度6其中与showInfo直接相关的是percent信息区显示的百分比来源。传入showInfo{true}且未提供renderInfo时中心显示${percent}%renderInfo当需要比“纯百分比”更丰富的内容时用它完全接管信息区渲染status设置statussuccess或fail时默认信息区会替换为对应的状态图标见下文源码说明这也解释了为什么设置了状态后中心往往不再显示百分比数字。四、源码级解析showInfo 背后发生了什么1. 信息区由共享组件 ProgressInfo 渲染showInfo控制的其实是ProgressInfo组件的挂载。该组件同时被ProgressLine与ProgressCircle复用位于 src/Progress/ProgressInfo.tsxconst ProgressInfo (props: ProgressInfoProps) { const { percent, renderInfo, status, classPrefix } props; const { prefix } useStyles(classPrefix); const showIcon status status ! active; return ( div className{prefix(info)} {renderInfo ? renderInfo(percent, status) : showIcon ? PROGRESS_STATUS_ICON[status] : ${percent}%} /div ); };其渲染优先级可以总结为若提供了renderInfo直接调用renderInfo(percent, status)完全自定义否则若status为success或failactive不显示图标显示 statusIcons 中对应的状态图标兜底显示${percent}%文本。由此可以推断只要showInfo为true无论是否设置status或renderInfo信息区都会渲染只是内容不同而showInfo{false}会让以上所有逻辑整体失效。2. percent 的两种来源ProgressCircle渲染时传入的percent实际是totalPercent。从 src/ProgressCircle/ProgressCircle.tsx 可以看到const totalPercent useMemo(() { if (!sections) return percent; return Math.min( 100, sections.reduce((acc, section) acc section.percent, 0) ); }, [percent, sections]);未使用sections时totalPercent就是percent使用了sections多分段时中心信息显示的百分比是所有分段percent之和上限 100。这也意味着showInfo开启时中心展示的数字会随sections配置动态变化。3. 可访问性并未因隐藏而缺失即使showInfo{false}隐藏了可见文本组件外层仍保留了完整的无障碍语义Box roleprogressbar aria-valuemin0 aria-valuemax100 aria-valuenow{totalPercent} ... /因此屏幕阅读器依然能够读取当前进度值隐藏视觉文本不会损害辅助技术支持这在数据可视化场景中是很实用的细节。五、从 showInfo 出发信息区的三种进阶用法官方文档围绕信息区还提供了两个直接相关的示例片段可用于在showInfo开启时进一步定制内容。1. 用 renderInfo 完全接管内容render-info 示例展示了三种自定义方式固定文案、百分比 文案组合、以及按status切换图标与颜色import { ProgressCircle, HStack, VStack, Text } from rsuite; import { FaCheckCircle } from react-icons/fa; const App () ( HStack spacing{20} {/* 固定文案 */} ProgressCircle percent{30} w{100} renderInfo{percent Usage} / {/* 文案 百分比 */} ProgressCircle percent{60} w{100} renderInfo{percent ( VStack aligncenter TextUsage/Text Text{percent}%/Text /VStack )} / {/* 按状态切换图标 */} ProgressCircle percent{100} w{100} statussuccess renderInfo{(percent, status) ( span style{{ color: status success ? #4CAF50 : #000 }} {status success ? FaCheckCircle size30 color#4CAF50 / : ${percent}%} /span )} / /HStack );注意renderInfo回调签名是(percent: number, status?: success | fail | active) ReactNode与ProgressInfo内部调用完全一致。2. 配合 status 显示状态语义status 示例中showInfo保持默认开启通过status表达不同语义ProgressCircle percent{30} statusactive w{100} / ProgressCircle percent{30} statussuccess w{100} / ProgressCircle percent{30} statusfail w{100} /依据 ProgressInfo.tsx 的逻辑active状态只影响弧线动画样式、中心仍显示百分比success/fail状态则会将中心替换为对应的状态图标PROGRESS_STATUS_ICON。同时组件根节点会追加rs-progress-circle-success/rs-progress-circle-fail等状态类名见 ProgressCircle.tsx 中withPrefix({ [${status || }]: !!status })便于做样式定制。3. 需要纯图形时直接关掉当页面视觉元素过多、或环形图只承担“装饰 颜色语义”职责时采用本文核心示例的写法ProgressCircle percent{30} showInfo{false} w{100} /此时中心空白配合 stroke-color 示例strokeColor自定义弧线颜色、stroke-width 示例strokeWidth调整粗细与 gap 示例gapDegree/gapPosition控制缺口即可组合出风格统一的纯图形进度指示器。六、测试用例佐证行为可验证仓库中的单元测试明确覆盖了showInfo的两个分支it(Should render info, () { render(ProgressCircle /); expect(screen.getByRole(progressbar).querySelector(.rs-progress-circle-info)).to.exist; }); it(Should not render info, () { render(ProgressCircle showInfo{false} /); expect(screen.getByRole(progressbar).querySelector(.rs-progress-circle-info)).to.not.exist; });即默认渲染.rs-progress-circle-info信息容器showInfo{false}时该容器不存在。同文件还验证了status类名、strokeLinecap属性透传、gapPosition起始位置等行为可作为回归验证的参照。七、实践建议小结何时开启需要向用户直接传达进度数值如上传统计、配额使用率时保持默认showInfo{true}何时关闭圆环仅作为状态色块、或信息已由外部文本呈现时使用showInfo{false}保持界面简洁进阶定制开启状态下优先考虑renderInfo做图文混排涉及成败语义时配合status使用组件会自动切换图标与状态类名百分比边界percent与sections分段求和都会传给信息区多分段场景下中心数字为各段之和封顶 100。如需进一步阅读可参考ProgressCircle 官方文档中的完整属性说明以及各 fragments 示例basic.md、sections.md、stroke-linecap.md 等它们共同构成了该组件的完整用法图谱。赞分享前端UI组件【免费下载链接】rsuite A suite of React components .项目地址https://gitcode.com/gh_mirrors/rs/rsuite点击查看免费下载相关推荐gogcli gog drive comments 命令详解在终端中管理 Google Drive 文件评论gogcli gog drive comments 命令详解在终端中管理 Google Drive 文件评论 本篇文章聚焦 gogcliGoogle Wor前端UI组件Material Design Lite进度指示器线性与环形进度条完整指南Material Design Lite进度指示器线性与环形进度条完整指南 Material Design LiteMDL进度指示器是网页和应用中不可或缺前端UI组件Clean Dart实战案例如何用FirebaseMobX实现登录功能的分层架构Clean Dart实战案例如何用FirebaseMobX实现登录功能的分层架构 Clean Dart是一种基于Robert C. Martin提出的整洁上一篇终极指南5分钟在Windows/Linux上轻松获取苹果平方字体完整方案下一篇BilldDesk 客户端安装故障排查指南Windows 闪退与 macOS「已损坏」提示的解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考