输入未写入输入字段.. React useForm Hook 注册验证引起的问题
Input not writing into input field.. Issue caused by React useForm Hook register validations
const { register, handleSubmit, errors, setValue } = useForm();
<div className="col pl-0 pr-3">
<FormInput
id="id"
name="name"
isAllowed={e => e.value == '' || (e.value.length <= 14 && e.floatValue >= 0)}
allowLeadingZeros={true}
decimalScale={0}
onChange={e => setName(e.target.value)}
value={Name}
ref={register({ required: { value: true, message: "Please enter name" } })}
/>
<ErrorMessage
errors={errors}
className="col-md-6"
name="name"
as="small"
/>
</div>
在上面的代码中,这里的FormInput是从StyledInput自定义的。
显示无效消息后,当我尝试在输入字段中输入内容时,第一个字符未写入字段,但它正在清除第二个字符写入字段的无效错误消息。有什么问题如何解决谁能帮我解决这个问题吗?
已更新
通过使用控制输入,第 3 方库可以使用 react-hook-form。
https://react-hook-form.com/get-started#IntegratingControlledInputs
<Controller
as={
<NumberFormat
thousandSeparator={true}
allowLeadingZeros={true}
decimalScale={0}
onValueChange={(value) => {
console.log(value);
}}
isAllowed={(e) =>
e.value === "" || (e.value.length <= 14 && e.floatValue >= 0)
}
/>
}
id="id"
name="name"
defaultValue="1234"
control={control}
rules={{
required: true,
minLength: 2
}}
/>
无需使用其他状态来控制值。
该组件以名称“name”在 react-hooks-form 中注册,它将为您创建名称状态并处理状态更改。
删除以下行:
const [name, setName] = useState(); // I think you have your own name state, remove it
value={name} // remove it
onChange={(e) => setName(e.target.value)} // remove it
const { register, handleSubmit, errors, setValue } = useForm();
<div className="col pl-0 pr-3">
<FormInput
id="id"
name="name"
isAllowed={e => e.value == '' || (e.value.length <= 14 && e.floatValue >= 0)}
allowLeadingZeros={true}
decimalScale={0}
onChange={e => setName(e.target.value)}
value={Name}
ref={register({ required: { value: true, message: "Please enter name" } })}
/>
<ErrorMessage
errors={errors}
className="col-md-6"
name="name"
as="small"
/>
</div>
在上面的代码中,这里的FormInput是从StyledInput自定义的。
显示无效消息后,当我尝试在输入字段中输入内容时,第一个字符未写入字段,但它正在清除第二个字符写入字段的无效错误消息。有什么问题如何解决谁能帮我解决这个问题吗?
已更新
通过使用控制输入,第 3 方库可以使用 react-hook-form。 https://react-hook-form.com/get-started#IntegratingControlledInputs
<Controller
as={
<NumberFormat
thousandSeparator={true}
allowLeadingZeros={true}
decimalScale={0}
onValueChange={(value) => {
console.log(value);
}}
isAllowed={(e) =>
e.value === "" || (e.value.length <= 14 && e.floatValue >= 0)
}
/>
}
id="id"
name="name"
defaultValue="1234"
control={control}
rules={{
required: true,
minLength: 2
}}
/>
无需使用其他状态来控制值。 该组件以名称“name”在 react-hooks-form 中注册,它将为您创建名称状态并处理状态更改。
删除以下行:
const [name, setName] = useState(); // I think you have your own name state, remove it
value={name} // remove it
onChange={(e) => setName(e.target.value)} // remove it