JGuang

密码输入框 <Experimental></Experimental>

PasscodeInput <Experimental></Experimental> · Ant Design Mobile

交互预览
npm install antd-mobile@5.43.0

密码输入框 <Experimental></Experimental> PasscodeInput <Experimental></Experimental>

密码输入本文框。

安装

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。

密码输入本文框。

何时使用

适用于输入密码时需要脱敏显示。

密码、验证码输入框

示例

PasscodeInput

属性

属性说明类型默认值版本
caret是否展示光标booleantrue
className外层 classNamestring-
defaultValue非受控值string-
direction输入框方向'ltr' | 'rtl''ltr'
error是否有错booleanfalse
keyboard键盘组件,如不传,默认使用系统原生的键盘NumberKeyboard-
inputMode输入框类型, 改变原生键盘类型'numeric' | 'text''numeric'5.39.0
length输入框长度number6
plain是否展示明文booleanfalse
seperated格子是否是彼此分离的booleanfalse
style外层 styleCSSProperties-
value受控值string-
onBlur失去焦点回调() => void-
onChange输入时回调(value: string) => void-
onFill填写完成回调() => void-
onFocus获取焦点回调() => void-

当 length 为非正数时以默认值为准。

Ref

属性说明类型
blur让输入框失去焦点() => void
focus让输入框获得焦点() => void

CSS 变量

属性说明默认值
--border-color边框颜色var(--adm-color-border)
--border-radius边框圆角8px
--cell-gap单元格间距,仅在 seperated 模式下生效6px
--cell-size单元格大小40px
--dot-size密码隐藏时,点的大小10px

FAQ

Q: PasscodeInput 在 iOS 上点击自动填充短信验证码,但格子内不显示数字?

这是 iOS 系统的兼容性限制导致的。在部分机型上,短信回填会直接写入原生 input 元素,但不触发 React 的 onChange 事件,导致组件状态无法同步。可以通过 ref 获取原生 input 元素,在 onFocus 或 onFill 回调中使用 setTimeout 手动同步 input.value。如果回填后需要调用 blur() 收起键盘,建议同样放在延迟逻辑中,确保状态渲染完成后再失焦。

const inputRef = useRef(null);
const [value, setValue] = useState('');

const syncValue = () => {
  setTimeout(() => {
    // 获取原生 input 的值并同步
    const realValue = inputRef.current?.nativeElement?.value || inputRef.current?.value;
    if (realValue && realValue !== value) {
      setValue(realValue);
    }
  }, 100);
};

<PasscodeInput
  ref={inputRef}
  value={code}
  onChange={setCode}
  onFocus={handleFocus}
/>