PinInput — это компонент библиотеки Chakra UI,
предназначенный для ввода PIN-кодов или одноразовых кодов подтверждения.
Он обеспечивает удобный пользовательский интерфейс с возможностью
автоматического фокуса, ограничения ввода и кастомизации внешнего
вида.
value — текущее значение PIN-кода.
Может использоваться совместно с onChange для контроля
состояния.onChange — функция обратного вызова,
вызываемая при изменении значения. Возвращает строку с текущим введённым
кодом.type — тип ввода, может быть
"text" или "number". Для PIN-кодов чаще
используется "number".size — размер полей ввода.
Поддерживаются стандартные размеры Chakra: "sm",
"md", "lg".isDisabled — отключает ввод всех
полей.isInvalid — отмечает ввод как
некорректный визуально, применяя стили ошибки.autoFocus — автоматически фокусирует
первое поле при рендере.PinInput используется совместно с дочерним компонентом
PinInputField. Например:
import { PinInput, PinInputField, HStack } from "@chakra-ui/react";
<HStack>
<PinInput onCha nge={(value) => console.log(value)} size="lg">
<PinInputField />
<PinInputField />
<PinInputField />
<PinInputField />
</PinInput>
</HStack>
HStack обеспечивает горизонтальное
расположение полей.PinInputField отвечает за одну цифру или
символ.PinInputField.PinInput поддерживает как управляемый, так и
неуправляемый режим:
Неуправляемый:
<PinInput>
<PinInputField />
<PinInputField />
<PinInputField />
</PinInput>
Управляемый:
const [pin, setPin] = useState("");
<PinInput value={pin} onCha nge={setPin}>
<PinInputField />
<PinInputField />
<PinInputField />
<PinInputField />
</PinInput>
autoFocus на PinInput
устанавливает фокус на первый PinInputField.PinInputField.ref и методов
focus().isInvalid выделяет поля красным цветом
для визуального сигнала ошибки.focusBorderColor, errorBorderColor,
variant.Пример кастомного оформления:
<PinInput size="lg" isInvalid>
<PinInputField focusBorderColor="blue.500" errorBorderColor="red.500" />
<PinInputField focusBorderColor="blue.500" errorBorderColor="red.500" />
<PinInputField focusBorderColor="blue.500" errorBorderColor="red.500" />
</PinInput>
onComplete — вызывается, когда все
поля заполнены. Удобно для автоматической отправки кода.onChange — возвращает текущее
состояние кода при каждом изменении.react-hook-form или другими
библиотеками управления формами для интеграции с валидацией.Пример использования onComplete:
<PinInput onCompl ete={(value) => alert(`Код введен: ${value}`)}>
<PinInputField />
<PinInputField />
<PinInputField />
<PinInputField />
</PinInput>
aria-label для каждого поля.FormControl для
правильной доступности.chakra(PinInputField) для
полной кастомизации стиля, включая анимации и тени.onChange и onComplete
для работы с данными формы.PinInput предоставляет готовое решение для ввода
коротких кодов, делая интерфейс интуитивным и легко настраиваемым без
необходимости вручную управлять фокусом и ограничениями ввода.