Я использую react-hook-form для своих входных компонентов, но есть одна проблема. В каком-то текстовом поле, например, текстовое поле для проверки, которое принимает только число, я не знаю, как это сделать, с обычным textInputмы можем использовать регулярное выражение, например
const [numberInput, setNumberInput] = useState("")
function onTextChanged(value) {
setNumberInput(value.replace(/[^0-9]/, ""))
}
и поместите эту функцию и значение ловушки на onTextChangeи valueсоответственно, я попробовал тот же метод, что и выше, на форме реакции-хука, но это не сработает! я все еще могу вводить другие символы, такие как «+» или «-», конечно, используя цифровую клавиатуру
Итак, вот компонент TextField
export interface HTextFieldProps extends TextFieldProps {
control: Control<any>
name: string
defaultValue?: string
}
/**
* Describe your component here
*/
export const HTextField = function HookformTextField(props: HTextFieldProps) {
const { name, control, defaultValue = "",...restProps } = props
return (
<Controller
control={control}
name={name}
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
{...restProps}
onChangeText={onChange}
value={value}
defaultValue={defaultValue}
error={(error && error.message) as TxKeyPath}
/>
)}
defaultValue={defaultValue}
/>
)
}
Вот когда я использую это
<HTextField
onChangeText={(value) => onTextChanged(value)}
value={numberInput}
name={"times"}
control={control}
autoCapitalize="none"
keyboardType={Platform.OS === "android"? "numeric": "number-pad"}
returnKeyType="done"
inputStyle={INPUT_STYLE}
required
/>
Итак, как я могу использовать только число в форме реакции-хука, похожей на это, большое спасибо
Решение проблемы
Проверьте документы (V7): https://react-hook-form.com/api/useform/register
<input
type="number"
{...register("test", {
valueAsNumber: true,
})}
/>
Если не использоватьtype="number"
<input
{...register("test", {
valueAsNumber: true,
pattern:{
value: /^(0|[1-9]\d*)(\.\d+)?$/
},
})}
/>
Вы все еще можете использовать validate.
<input
{...register("test", {
valueAsNumber: true,
validate: (value) => value > 0,
})}
/>
Комментариев нет:
Отправить комментарий