Skyroc UI
输入

InputOTP

用于验证码、一次性密码和分段短码输入的 OTP 输入组件

InputOTP 用于输入固定长度的一次性密码、短信验证码、邮箱验证码或短码。组件基于 input-otp 封装,默认渲染 6 个输入槽,并提供分隔符、掩码、受控值和完成回调。

import {
  InputOTP,
  InputOTPGroup,
  InputOTPSeparator,
  InputOTPSlot,
  InputOtpRoot
} from '@skyroc/web-ui';

何时使用

  • 需要输入固定长度验证码、一次性密码或短码。
  • 输入内容需要按位展示,并在填满后触发完成逻辑。
  • 需要支持粘贴完整验证码、自动补全或密码管理器兼容策略。
  • 普通单行文本输入使用 Input;数字步进输入使用 NumberInput。

基础用法

默认渲染 6 个输入槽。通过 onComplete 可以在输入填满后触发业务逻辑。

Preview
Code
Loading...

自定义长度

通过 inputCount 控制输入槽数量。组件会把该值作为底层 maxLength

Preview
Code
Loading...

受控值

通过 valueonChange 控制输入值,可以在回调中对输入内容做转换。

Preview
Code
Loading...

分隔符

通过 separator 开启分隔展示。传入 true 时使用默认 Minus 图标;如果需要自定义分隔符,请传入 React element。

Preview
Code
Loading...
Preview
Code
Loading...

密码模式

通过 mask 将已输入字符显示为圆点,适合验证码或一次性密码等敏感输入。

Preview
Code
Loading...

禁用

通过 disabled 禁用底层输入能力。

Preview
Code
Loading...

尺寸

通过 size 调整每个输入槽的宽高、字号和分隔符字号,从 xs2xl 共 6 个尺寸。

尺寸槽尺寸字号适用场景
xs24px10px紧凑表单、表格内嵌
sm28px12px辅助验证流程
md32px14px常规场景(默认)
lg36px16px重点验证区域
xl40px18px大号验证输入
2xl48px20px首屏或强引导流程

自定义样式

通过 classNames 控制不同 slot:rootgroupinputseparator。也可以通过 groupPropsslotPropsseparatorProps 分别向内部结构组件传入额外属性。

API

InputOTP

通用属性参考:封装 InputOtpRootInputOTPGroupInputOTPSlotInputOTPSeparator 的便捷组件。

属性说明类型默认值
value受控 OTP 值string-
defaultValue非受控模式下的默认 OTP 值string-
onChangeOTP 值变化时触发(value: string) => void-
onComplete输入槽全部填满时触发function-
inputCount输入槽数量,同时作为底层 maxLengthnumber6
mask是否用圆点隐藏已输入字符booleanfalse
separator是否显示分隔符;true 使用默认 Minus 图标,自定义内容建议传 React elementReactNode | true-
size尺寸,影响输入槽宽高、字号和分隔符字号'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
placeholder空槽位的占位字符string-
disabled是否禁用输入boolean-
inputMode移动端输入键盘类型string-
type底层 input 类型,例如 passwordstring-
pasteTransformer粘贴内容转换函数,用于清理空格、短横线等格式(pasted: string) => string-
pushPasswordManagerStrategy密码管理器兼容策略'increase-width' | 'none'-
textAlign输入文本对齐方式'center' | 'left' | 'right'-
className传递给根节点的自定义 classClassValue-
classNames各 slot 的自定义 class(root / group / input / separator)InputOTPClassNames-
groupProps传递给 InputOTPGroup 的额外 propsInputOTPGroupProps-
slotProps传递给每个 InputOTPSlot 的额外 propsInputOTPSlotProps-
separatorProps传递给 InputOTPSeparator 的额外 propsInputOTPSeparatorProps-

结构组件

当需要完全自定义 OTP 结构时,可以直接组合底层结构组件。

属性说明类型默认值
InputOtpRoot根输入组件,基于 input-otp 的 OTPInputInputOTPRootProps-
InputOTPGroup输入槽容器,负责排列多个 slotInputOTPGroupProps-
InputOTPSlot单个输入槽,必须提供 indexInputOTPSlotProps-
InputOTPSeparator分隔符容器,默认显示 Minus 图标InputOTPSeparatorProps-

类型

InputOTPProps

主组件属性。基于 input-otp 根输入属性,移除 maxLength,并通过 inputCount 自动生成输入槽。

字段类型说明
classNameClassValue根节点 class。
classNamesInputOTPClassNames各 slot 的自定义 class。
defaultValuestring非受控默认值。
disabledboolean是否禁用。
groupPropsInputOTPGroupProps传递给分组容器的属性。
inputCountnumber输入槽数量。默认值为 6。
inputModestring移动端输入键盘类型。
maskboolean是否隐藏槽位字符。默认值为 false。
onChange(value: string) => void输入值变化回调。
onCompletefunction输入完成回调。
pasteTransformer(pasted: string) => string粘贴内容转换函数。
placeholderstring空槽位占位字符。
pushPasswordManagerStrategy'increase-width' | 'none'密码管理器兼容策略。
separatorReactNode | true分隔符配置。true 使用默认 Minus 图标。
separatorPropsInputOTPSeparatorProps传递给分隔符的属性。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
slotPropsInputOTPSlotProps传递给每个输入槽的属性。
textAlign'center' | 'left' | 'right'输入文本对齐方式。
typestring底层 input 类型。
valuestring受控输入值。

InputOTPClassNames

各 slot 的自定义 class,用于精细化控制 InputOTP 各部分的样式。

字段类型说明
rootClassValue根节点 class。
groupClassValue输入槽分组容器 class。
inputClassValue输入槽 class。
separatorClassValue分隔符 class。

InputOTPRootProps

根输入属性。基于 input-otp 的 OTPInput,支持 children 组合或 render 函数二选一。

字段类型说明
childrenReactNode自定义结构子节点。与 render 二选一。
classNameClassValue根节点 class。
containerClassNamestring底层容器 class。
maxLength*number最大输入长度。
onChange(value: string) => void输入值变化回调。
onCompletefunction输入完成回调。
pasteTransformer(pasted: string) => string粘贴内容转换函数。
pushPasswordManagerStrategy'increase-width' | 'none'密码管理器兼容策略。
renderInputOTPRenderFn自定义渲染函数。与 children 二选一。
textAlign'center' | 'left' | 'right'输入文本对齐方式。
valuestring受控输入值。

InputOTPGroupProps

输入槽分组容器属性。继承 div 元素属性,并支持 separate 和 size。

字段类型说明
childrenReactNode输入槽和分隔符内容。
classNameClassValue分组容器 class。
separateboolean是否让输入槽分离展示。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

InputOTPSlotProps

单个输入槽属性。通过 index 从 InputOTP 上下文中读取对应槽位状态。

字段类型说明
classNameClassValue输入槽 class。
index*number槽位索引,从 0 开始。
maskboolean是否隐藏当前槽位字符。
separateboolean是否按分离样式显示。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

InputOTPSeparatorProps

分隔符容器属性。继承 div 元素属性。

字段类型说明
childrenReactNode自定义分隔符。当前只有 React element 会替换默认 Minus 图标。
classNameClassValue分隔符 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。

InputOTPSlots

InputOTP 可配置 classNames 的内置 slot

'root' | 'group' | 'input' | 'separator'

InputOTPRenderFn

InputOtpRoot 的自定义渲染函数

(props) => ReactNode

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page