0
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 定制的。

显示无效消息后,当我尝试在输入字段中输入内容时,第一个字符未写入字段,但它正在清除第二个字符写入字段的无效错误消息。有什么问题如何解决它谁能帮我解决这个问题?

4

1 回答 1

0

更新

通过使用控制输入,第 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
   }}
/>


无需使用其他状态来控制值。该组件在 react-hooks-form 中注册,名称为“name”,它将为您创建名称状态并处理状态更改。

删除以下行:

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
于 2021-05-10T04:58:32.257 回答