Arco Design Switch 开关组件基础用法详解:从最小示例到受控原理
UI组件前端设计系统【免费下载链接】arco-designA comprehensive React UI components library based on Arco Design项目地址https://gitcode.com/gh_mirrors/ar/arco-design点击查看免费下载开关Switch是 Arco Design 数据输入类组件中用于表达互斥状态切换的核心控件用户通过点击在打开 / 关闭两个状态之间切换。本篇基于arco-design/web-react仓库中 Switch 组件的基础用法文档与源码实现带你从import { Switch } from arco-design/web-react这一最小示例出发逐步掌握开关的受控与非受控用法、onChange回调、三种外观类型、尺寸与禁用/加载状态并深入组件源码了解其底层渲染与状态管理原理。安装与引入Switch 组件从组件库根入口统一导出。在仓库中components/index.tsx 负责对外导出Switch及其类型定义export type { SwitchProps } from ./Switch/interface; export { default as Switch } from ./Switch;因此在业务代码中只需一行引入即可使用import { Switch } from arco-design/web-react;组件自身的核心实现位于 components/Switch/index.tsx类型定义位于 components/Switch/interface.ts样式位于 components/Switch/style/index.less 与 components/Switch/style/token.less。最基础的应用一行代码的开关基础用法文档 components/Switch/demo/basic.md 给出了 Switch 最朴素的使用方式——不传任何属性渲染一个默认状态关闭的开关import { Switch } from arco-design/web-react; const App () { return Switch /; }; export default App;这个最小示例背后是完整的默认行为初始状态为关闭checked false点击后切换为打开再次点击恢复关闭循环往复采用默认的circle圆形外观类型未受控状态由组件内部管理。仓库的演示快照 components/Switch/test/snapshots/demo.test.ts.snap 记录了该基础示例的实际 DOM 输出可以直观看到组件最终渲染为一个原生button元素button aria-checkedfalse classarco-switch arco-switch-type-circle roleswitch typebutton div classarco-switch-dot / /button值得注意的细节是开关并非用div或span模拟而是真正的button标签并带有roleswitch与aria-checked属性——这意味着开关天然支持键盘操作与无障碍a11y语义这与 components/Switch/index.tsx 中源码的渲染逻辑完全一致。状态管理受控与非受控基础用法虽然只有一行代码但理解其状态模型是进阶使用的前提。从源码 components/Switch/index.tsx 可以看到 Switch 同时支持受控与非受控两种模式const [checked, setChecked] useStateboolean(props.defaultChecked); const mergedChecked checked in props ? props.checked : checked; const onHandleClick (event) { if (loading) { return; } props.onClick props.onClick(event); if (!(checked in props)) { setChecked(!mergedChecked); } onChange onChange(!mergedChecked, event); };非受控默认不传checked组件内部用useState以defaultChecked为初始值维护状态用户点击后内部自动取反受控传入checked属性后checked in props成立点击不再修改内部 state显示值完全由外部checked决定此时必须配合onChange自行更新状态例如import { useState } from react; import { Switch } from arco-design/web-react; const App () { const [checked, setChecked] useState(true); return ( Switch checked{checked} onChange{(value) setChecked(value)} / ); }; export default App;这种以属性是否存在判断受控与否的写法是 Arco Design 组件库统一的状态管理模式也与仓库测试用例 components/Switch/test/index.test.tsx 中的行为验证一一对应。onChange 回调获取切换结果点击开关时通过onChange回调拿到最新的布尔值这是开关最常用的交互出口常用于联动表单或业务状态import { Switch } from arco-design/web-react; const App () { return ( Switch defaultChecked onChange{(value, event) { console.log(开关状态, value); }} / ); }; export default App;回调签名定义在 components/Switch/interface.ts参数说明value: boolean点击后开关将要切换到的状态已取反后的新值event触发点击的原生事件对象需要注意回调参数value是切换后的新值而非当前值点击后回调传入!mergedChecked。仓库测试 components/Switch/test/index.test.tsx 验证了这一点——defaultChecked的开关被点击后onChange收到的第一个参数为false。此外event参数是在 2.0.0 版本中为onChange新增的见 components/Switch/changelog/index.zh-CN.md。三种外观类型circle / round / line通过type属性可切换三种样式类型默认值为circleimport { Switch, Space } from arco-design/web-react; const App () { return ( Space sizelarge Switch / Switch typeround / Switch typeline / /Space ); };类型说明circle默认类型圆形容器配圆形滑块胶囊式外观round圆角矩形滑块偏直角风格line线型开关容器透明、滑块底部带一条轨道线三种类型在源码中的差异由type派生 class 实现components/Switch/index.tsx具体视觉差异定义在样式文件 components/Switch/style/index.less 中round类型调整了容器与滑块的圆角border-radiusline类型则通过::after伪元素绘制底部轨道switch-line-height-bg-line并将容器背景置为透明。测试用例 components/Switch/test/index.test.tsx 验证了round与line类型会分别挂载arco-switch-type-round、arco-switch-type-line类名。尺寸default 与 small通过size属性可切换开关尺寸Switch / Switch sizesmall /尺寸取值仅有small | default两种默认尺寸下高度为switch-size-defaultsize-6small 尺寸为switch-size-smallsize-4相关 token 定义在 components/Switch/style/token.less。从源码 components/Switch/index.tsx 可以看出size优先级为propSize || ctxSize即组件自身传入的size优先其次继承 ConfigProvider 的全局size配置未设置时走默认尺寸。测试 components/Switch/test/index.test.tsx 验证了sizesmall会生成arco-switch-small类名。禁用与加载状态disabled使开关不可交互loading使开关进入加载中状态且同样不可点击Switch disabled / Switch disabled defaultChecked / Switch loading / Switch loading defaultChecked /这两个属性的行为在源码中有着明确的边界处理components/Switch/index.tsxloading状态下点击事件直接return不会触发任何状态变更与onChange同时tabIndex被设为-1键盘焦点也被移除见渲染部分 components/Switch/index.tsxloading时滑块内的图标会被替换为内置的IconLoading旋转图标components/Switch/index.tsxdisabled通过原生disabled属性施加到button上同时样式层components/Switch/style/index.less为禁用态定义了独立的背景色与文本色 token。测试用例 components/Switch/test/index.test.tsx 专门验证了loading 状态下即使触发点击开关仍保持arco-switch-checked状态不变且滑块内渲染的是arco-icon-loading图标。自定义文案与图标除了基础用法Switch 还支持在打开 / 关闭时展示自定义文案或图标它们与基础用法同属开关键上内容的配置范畴Switch checkedTextON uncheckedTextOFF / Switch checkedText1 uncheckedText0 typeround defaultChecked / Switch checkedIcon{IconCheck /} uncheckedIcon{IconClose /} defaultChecked /checkedText/uncheckedText打开 / 关闭时显示的文案small 尺寸与line类型下不生效源码渲染条件见 components/Switch/index.tsxcheckedIcon/uncheckedIcon打开 / 关闭时滑块内显示的图标切换时通过SwitchTransition包裹的ArcoCSSTransition执行 200ms 的淡入切换动画components/Switch/index.tsx。文案的展开与收起还使用了名为switchSlideText的位移动画其 enter / exit 关键帧定义在 components/Switch/style/index.less。API 完整速查以下为 Switch 全部可用属性整理自组件文档 components/Switch/README.zh-CN.md 与类型定义 components/Switch/interface.ts参数名描述类型默认值checked开关是否打开受控boolean-defaultChecked默认是否选中非受控初始值boolean-disabled是否禁用boolean-loading加载中状态不可点击boolean-size开关尺寸可选small和defaultsmall \| default-type三种样式类型circle \| round \| linecirclecheckedIcon开关打开时按钮上显示的图标ReactNode-checkedText开关打开时的文案small 尺寸不生效ReactNode-uncheckedIcon开关关闭时按钮上显示的图标ReactNode-uncheckedText开关关闭时的文案small 尺寸不生效ReactNode-className节点类名string \| string[]-style节点样式CSSProperties-onChange点击开关的回调(value: boolean, event) void-此外SwitchProps继承了HTMLAttributesHTMLButtonElementcomponents/Switch/interface.ts因此原生button的其它属性如onClick、id、tabIndex等也可直接透传。源码实现要点与可访问性从源码结构components/Switch/index.tsx可以提炼出几个值得借鉴的实现细节原生按钮语义组件渲染为button roleswitch aria-checked{!!mergedChecked} typebutton确保屏幕阅读器能正确朗读开关状态键盘用户也能通过空格 / 回车触发components/Switch/index.tsx组件级默认配置合并通过useMergeProps将用户属性、组件defaultProps与ConfigProvider的componentConfig?.Switch合并components/Switch/index.tsx意味着可在全局统一配置 Switch 的默认行为仓库的componentConfigTest测试components/Switch/test/index.test.tsx验证了这一点children 兼容写法支持通过children传入key为open/close的元素作为文案同时官方建议优先使用checkedText/uncheckedText参数components/Switch/index.tsx事件集成Switch 可作为Popconfirm等弹出组件的触发器正常使用仓库测试 components/Switch/test/index.test.tsx 与变更记录 components/Switch/changelog/index.zh-CN.md 均确认了这一点。测试保障与使用建议Switch 的每个 demo 都会经过自动化测试渲染验证仓库通过 components/Switch/test/demo.test.ts 调用通用的demoTest(Switch)对全部 demo 进行渲染快照保存在 components/Switch/test/snapshots/demo.test.ts.snap行为层面的单元测试集中在 components/Switch/test/index.test.tsx。实际开发中的建议仅需一个开 / 关独立状态时直接使用Switch /的最简形式即可配合onChange读取结果状态由父组件或表单数据驱动时务必使用checkedonChange的受控模式避免状态不同步需要等待异步操作如保存设置时先切换状态、待请求返回后再渲染loading开关可有效防止用户重复点击表单场景中结合 Form 组件使用时小尺寸 Form 下的尺寸继承问题在历史版本中曾修复过见 components/Switch/changelog/index.zh-CN.md若自定义尺寸请显式传入size。以上内容均以当前仓库中 Switch 组件的 demo 文档、API 文档、源码、样式与测试为依据读者可对照 components/Switch/README.zh-CN.md、components/Switch/index.tsx 与 components/Switch/interface.ts 进一步深入阅读。赞分享UI组件前端设计系统【免费下载链接】arco-designA comprehensive React UI components library based on Arco Design项目地址https://gitcode.com/gh_mirrors/ar/arco-design点击查看免费下载相关推荐Ant Design Switch 组件基础用法全解从最小示例到受控状态与源码实现Ant Design Switch 组件基础用法全解从最小示例到受控状态与源码实现 本篇技术指南以 Ant Design 仓库中 components/swi前端UI组件设计系统Czkawka 重复文件清理指南免费用 14 种工具找回磁盘空间Czkawka 重复文件清理指南免费用 14 种工具找回磁盘空间 Czkawka 重复文件清理是一种免费开源的磁盘空间回收方式。它是一套用 Rust 编写的多桌面应用Arco Design Pagination 分页组件基础用法全解析从一行 Pagination total{200} / 到受控分页Arco Design Pagination 分页组件基础用法全解析从一行 Pagination total{200} / 到受控分页 导读 分页PagUI组件前端设计系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Spring Cloud Gateway 配置绑定失败:Failed to bind properties 排查与修复

Spring Cloud Gateway 配置绑定失败:Failed to bind properties 排查与修复

遇到过Failed to bind properties under to org.springframework.cloud.gateway这个报错的朋友,估计当时心态都有点崩。前面一大堆启动日志,翻到最后就看到这么一句,既没有具体的属性名,也没有行号,看起来像配置有问题…

2026/10/13 10:06:25 阅读更多 →
视频封面有宽高为什么仍是空图

视频封面有宽高为什么仍是空图

视频已经读出了宽高和时长,拿它画封面却得到一张空图。这次我测了不同加载阶段的绘制结果,才把这个看着矛盾的现象拆开。样本是同一段冰岛海浪素材转出的两种格式,规格相同:6秒长、宽640px、高360px。尺寸能读出来。绘制也没报错。…

2026/10/13 10:05:23 阅读更多 →
零基础用AI编程做产品并变现的完整路径

零基础用AI编程做产品并变现的完整路径

最近半年,我身边至少有十个人问过同一个问题:完全零基础、连编程语言的“Hello World”都没写过的人,靠AI到底能不能做产品?我的回答一直是斩钉截铁的“能”。但我也一定会补一句:“能不能做出产品”和“能不能靠它赚到…

2026/10/13 10:05:23 阅读更多 →

最新新闻

从零搭建ELK日志分析平台:架构设计、组件选型与实战调优

从零搭建ELK日志分析平台:架构设计、组件选型与实战调优

说实话,我在接手公司日志平台之前,排查故障靠的是“三件套”组合拳:登录服务器、grep关键字、tail -f盯屏幕。最开始那几年业务量不大,这招勉强够用,可一旦服务器数量超过两位数、日志格式五花八门,这套土办…

2026/10/13 12:58:10 阅读更多 →
数论基础实战:从紫书第10章到Kuangbin专题14的题型拆解

数论基础实战:从紫书第10章到Kuangbin专题14的题型拆解

如果你正卡在紫薯第10章数学,准备转战Kuangbin专题14数论基础,我给你一句忠告——书上的公式全会了,不代表你看到题目能动手。我当年啃完紫书第10章,带着一堆“看起来都能推导”的公式点开专题14,第一题就把我按在地上…

2026/10/13 12:58:10 阅读更多 →
Conda报错排查指南:从repodata失败到依赖冲突的完整解决

Conda报错排查指南:从repodata失败到依赖冲突的完整解决

两行红字一贴,小白当场懵,老手也得先深吸一口气。Collecting package metadata (current_repodata.json): failed和Solving environment: failed这对组合,几乎每个用过 Anaconda 的人都撞见过:刚装完环境准备conda install pandas…

2026/10/13 12:58:10 阅读更多 →
基于Halton序列的图像加密解密算法详解与Matlab实现

基于Halton序列的图像加密解密算法详解与Matlab实现

做图像加密解密这个方向的,八成都有过这种感受:教材里的经典算法讲得头头是道,真到自己动手复现,却总在“看起来像那么回事”和“实际效果经不起推敲”之间反复横跳。我之前在做基于Halton序列的图像加密解密项目时,最…

2026/10/13 12:58:10 阅读更多 →
Kettle 9.3 源码编译实战:从 GitHub 构建可部署的 PDI 生产环境

Kettle 9.3 源码编译实战:从 GitHub 构建可部署的 PDI 生产环境

简介:本资源为Kettle(Pentaho Data Integration)最新9.3版本的官方安装包百度网盘直链,面向数据工程师、ETL开发人员及大数据初学者,解决国内用户因网络限制难以获取国际开源ETL工具的问题。资源以1个14KB的docx文档形…

2026/10/13 12:58:10 阅读更多 →
Agent上线最后一公里:评测门禁、可观测性埋点与AgentOps闭环落地指南

Agent上线最后一公里:评测门禁、可观测性埋点与AgentOps闭环落地指南

1. 从"能跑"到"敢上线":Agent 交付的最后一公里到底卡在哪做过 Agent 项目的人大概都有过这种体验:本地 Demo 跑得飞起,工具调用、多轮对话、RAG 检索全都正常,演示给同事看的时候掌声一片。可真到了要往生产…

2026/10/13 12:57:09 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →