GOOGLE ADS

среда, 27 апреля 2022 г.

Как ввести только число в форме реакции-хука

Я использую 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,
})}
/>

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...