我正在使用react-hook-form来对我的表格进行验证。
我在做什么
在react-hook-form
中,我们使用ref
来保存特定输入的值并进行验证。
但是这里只验证最后一个,我不知道我缺少什么。
这就是我在做什么。
<div className="row">
{[...Array(inputHolder).keys()].map((li, index) => (
<div className="col-12 col-sm-12 col-md-8 col-lg-4 col-xl-4">
<div className="form-group">
<input
type="text"
name="name"
id={'name' + index}
className="form-control"
placeholder="F Name"
ref={register({required: 'F name is required'})}
/>
<label className="common_label_form" htmlFor={'name' + index}>
F Name
</label>
{errors.name && (
<div>
<span className="text-danger">{errors.name.message}</span>
</div>
)}
</div>
</div>
))}
</div>;
我需要使refs
充满活力,但我不知道该如何实现。
我想拥有[{ name: 'name1' }, { name: 'name2' }]
之类的数据,这就是为什么我被卡住的原因,一旦获得数据,便可以将其压入数组。
答案 0 :(得分:2)
使用form
时,其中的任何输入元素(input
,select
...)都是通过name
属性而不是id
标识为你可能会想。
map(_, index) => (
<input
name={`name[${index}]`}
ref={register}
/>
)
当您记录提交数据时,它是这样的
{
"name": ["1", "2", "3"]
}
显示错误
{errors.name && errors.name[index] && (
<div>
{errors.name[index].message}
</div>
)}
map(_, index) => (
<input
name={`data[${index}].name`}
ref={register}
/>
)
输出
{
"data": [
{ "name": "1" },
{ "name": "2" },
{ "name": "3" }
]
}
显示错误
{errors.data && errors.data[index] && errors.data[index].name && (
<div>
{errors.data[index].name.message}
</div>
)}
map(_, index) => (
<input
name={`name_${index}`}
ref={register}
/>
)
输出:
{
"name_0": "1",
"name_1": "2",
"name_2": "3"
}
显示错误
{errors["name_" + index] && (
<div>
{errors["name_" + index].message}
</div>
)}
答案 1 :(得分:0)
我认为您应该仅更改输入name
,例如
...
<input
type="text"
name={'name' + index} // you should change this
id={'name' + index}
className="form-control"
placeholder="F Name"
ref={register({required: 'F name is required'})}
/>
...