我正在为我的项目使用react-hook-form验证。我有一个选择选项,当它更改时,我将所选选项的值设置为另一个输入,即客户,但当我提交表单时,客户值显示为空,如何解决此问题?
这是我的密码
function App() {
const [inputs, setInputs] = useState();
const [inputs1, setInputs1] = useState();
const {
register,
formState: { errors },
trigger,
handleSubmit
} = useForm({
defaultValues: {
searchby: "searchby",
customers: "",
firstName: ""
}
});
const onSubmit = (data) => {
alert(JSON.stringify(data));
};
const handleInputChanges = (event) => {
const name = event.target.name;
const value = event.target.value;
setInputs(value);
setInputs1(value);
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<select
name="searchby"
{...register("searchby", {
required: "password is required."
})}
value={inputs}
onChange={handleInputChanges}
>
<option selected value="searchby">
Search By
</option>
<option value="customerID">Custimer ID </option>
<option value="teleco">Teleco</option>
</select>
{errors.searchby && <p>This field is Required</p>}
<label>Customer: </label>
<input
name="customers"
{...register("customers")}
value={inputs1}
onChange={handleInputChanges}
/>
{errors.customers && <p>This field is Required</p>}
<label>First name: </label>
<input {...register("firstName", { required: true })} />
{errors.firstName && <p>This field is Required</p>}
<input type="submit" />
<button
type="button"
>
Validate All
</button>
</form>
);
}
这是我提交表单时得到的结果
代码链接:codesandbox.io
4条答案
按热度按时间gab6jxml1#
您在这里混合了传统的组件处理和
react-hook-form
。我们将依赖react-hook-form
并从那里开始。通过查看Codesandbox,我们需要进行以下更改:
onChange
处理程序。useForm()
调用更改为:register()
提供给我们的一些函数,以便对onChange
函数进行一些修改onSelectChange
处理程序,每次更改select的值时都会调用它<select/>
完整组装示例:
ohfgkhjo2#
当您使用{... register('anyFieldName')}时,它会给予您的组件react-hook-form新创建的表单字段值和处理程序,例如value & onChange处理程序等。当您使用自己的value & onChange处理程序时,它会覆盖react-hook-form的给定表单字段值& onChange处理程序。
您可以了解有关寄存器here的更多信息
这样试试
useController
挂钩,因为它比register
更灵活。使用register
,您的组件就不受您自己的控制。*r6vfmomb3#
这里的问题是,当选择“searchBy”选择值时,您正在动态设置“customers”输入值。在这种情况下,“customers”的onChange事件将不会被触发。但将在键入值时触发。
其中一个解决方案是在onsubmit触发器时添加动态变化的“customers”值,而不需要react-use-form的帮助
ttcibm8c4#
register
方法提供ref
、value
、onChange
和onBlur
作为输入,但您可以使用第二个参数传递自定义onChange
,并使用setValue
更新customers
输入: