JGuang

开关

Switch · Ant Design Mobile

交互预览
npm install antd-mobile@5.43.0

开关 Switch

开关选择器。

安装

npm install antd-mobile@5.43.0

antd-mobile 是移动网页组件库,不是 React Native 或小程序组件。React 19 项目需在入口用 unstableSetRender 注册 createRoot,否则 Toast、Dialog 等命令式 API 无法渲染;深色模式通过 <html data-prefers-color-scheme="dark"> 切换。

示例来自 Ant Design Mobile 官方仓库(MIT),固定在 npm 5.43.0 对应的提交;示例中的 DemoBlock 等展示辅助组件由 JGuang 重写,不属于 antd-mobile 的 API。

开关选择器。

何时使用

  • 需要表示开关状态/两种状态之间的切换时。
  • 和 checkbox 的区别是,切换 switch 会直接触发状态改变,而 checkbox 一般用于状态标记,需要和提交操作配合。

示例

Switch

属性

参数说明类型默认值
beforeChange(已弃用)变化前执行(已弃用,推荐使用 onChange 属性)(val: boolean) => Promise<void>-
checked指定当前是否打开booleanfalse
checkedText选中时的内容ReactNode-
defaultChecked初始是否打开booleanfalse
disabled禁用状态booleanfalse
loading加载状态booleanfalse
onChange变化时的回调函数,当返回 Promise 时,会自动显示加载状态(val: boolean) => void | Promise<void>-
uncheckedText非选中时的内容ReactNode-

CSS 变量

属性说明默认值
--border-width边框宽度2px
--checked-color填充颜色var(--adm-color-primary)
--height高度31px
--width宽度51px

FAQ

如何处理异步 onChange 中的异常?

onChange 事件支持返回一个 Promise,当 Promise 开始时,Switch 会自动进入加载状态,而当 Promise 完成或失败时,Switch 会自动退出加载状态。一般情况下,这满足大多数项目的需求。

但是当 Promise 失败时,Switch 并不会吃掉报错,而是会把这个错误对象重新抛出来,这是预期行为,如果你想自己拦截掉一些错误,避免他们被抛出,可以使用 try/catch 包裹 onChange 中的处理逻辑,例如:

async function onChange(val: boolean) {
  try {
    await doSomething();
  } catch (e) {
    // handle or ignore error
  }
}