Semi Design中的PinCode验证码输入组件详解

Semi Design中的PinCode验证码输入组件详解

semi-design 🚀A modern, comprehensive, flexible design system and React UI library. 🎨 Provide more than 2800+ Design Tokens, easy to build your design system. Make Semi Design to Any Design. 🧑🏻‍💻 Design to Code in one click semi-design 项目地址: https://gitcode.com/gh_mirrors/se/semi-design

什么是PinCode组件

PinCode是Semi Design提供的一个验证码输入组件,专门用于处理用户输入验证码的场景。它通过将验证码拆分为多个独立的输入框,为用户提供清晰直观的输入体验,同时内置了多种格式校验功能,确保用户输入符合预期的验证码格式。

核心特性

  1. 多尺寸支持:提供small、default、large三种尺寸选项
  2. 格式控制:可限制输入数字、字母或自定义字符
  3. 位数可配置:默认6位,可自由调整
  4. 事件回调:提供输入变化和完成输入的回调函数
  5. 受控/非受控:支持两种使用模式
  6. 聚焦控制:可通过API手动控制输入框焦点

基础使用

安装与引入

PinCode组件从2.62.0版本开始提供,使用时需要先引入:

import { PinCode } from '@douyinfe/semi-ui';

基本示例

function Demo() {
    return (
        <PinCode
            size={'default'}
            defaultValue={'123456'}
            onComplete={value => console.log('完成输入:', value)}
            onChange={value => console.log('输入变化:', value)}
        />
    );
}

进阶功能

受控模式

当需要完全控制组件状态时,可以使用受控模式:

function ControlledDemo() {
    const [value, setValue] = useState('');
    
    return (
        <PinCode
            value={value}
            onChange={v => setValue(v)}
            onComplete={v => console.log('验证码:', v)}
        />
    );
}

格式限制

PinCode提供了多种格式限制方式:

  1. 纯数字format="number"
  2. 数字和字母format="mixed"
  3. 正则表达式format={/[A-Z]/}
  4. 自定义函数format={char => /[a-z]/.test(char)}
<PinCode format="number" />  // 只允许数字
<PinCode format="mixed" />   // 允许数字和字母
<PinCode format={/[A-Z]/} /> // 只允许大写字母

位数配置

通过count属性可以设置验证码的位数:

<PinCode count={4} />  // 4位验证码
<PinCode count={6} />  // 默认6位

焦点控制

通过ref可以手动控制输入框的焦点:

function FocusDemo() {
    const ref = useRef();
    
    return (
        <>
            <Button onClick={() => ref.current.focus(2)}>聚焦第三个输入框</Button>
            <PinCode ref={ref} />
        </>
    );
}

设计原理

PinCode组件的实现基于以下几个关键点:

  1. 分割输入:将长验证码分割为多个单字符输入框,提升用户体验
  2. 自动跳转:当一个输入框输入完成后自动跳转到下一个
  3. 格式校验:在输入时实时校验每个字符的合法性
  4. 事件聚合:将分散的输入事件聚合成完整的验证码字符串

最佳实践

  1. 明确提示:在使用格式限制时,应在组件旁提示用户允许的输入格式
  2. 合理位数:根据业务需求设置合适的验证码位数,通常4-6位
  3. 完成回调:利用onComplete事件处理验证码提交逻辑
  4. 错误处理:结合Toast等组件提示用户输入错误

常见问题

  1. 为什么输入框会自动跳转?
    这是PinCode的默认行为,当输入一个字符后会自动聚焦到下一个输入框,提升输入效率。

  2. 如何禁用自动聚焦?
    设置autoFocus={false}可以禁用自动聚焦行为。

  3. 自定义样式如何实现?
    通过className和style属性可以自定义组件样式。

PinCode组件为验证码输入场景提供了完整的解决方案,开发者可以根据实际需求灵活配置,快速构建安全、友好的验证码输入功能。

semi-design 🚀A modern, comprehensive, flexible design system and React UI library. 🎨 Provide more than 2800+ Design Tokens, easy to build your design system. Make Semi Design to Any Design. 🧑🏻‍💻 Design to Code in one click semi-design 项目地址: https://gitcode.com/gh_mirrors/se/semi-design

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

费琦栩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值