英文:
Reach hook form create inputs dynamically with unic register{} name and id
问题
我正在动态创建数组内的新输入,并且每个输入都会有自己的 id
和 register{}
名称。为了做到这一点,我使用 array.map()
中的 index
值。
在 registerTrip()
函数中,我试图将每个输入值添加到一个数组中,将 counter
数字连接到 data.trip_start_date
,以便能够从输入中获取相应的值,但这个过程没有起作用。
即使我将变量 i
转换为字符串,我也无法将它们连接起来。
如果我 console.log(data.trip_start_date0)
,我可以获得值,但是当我 console.log(data.trip_start_date + s)
时,我会得到 undefined0
、undefined1
...
这样做是正确的方式吗,还是我应该以不同的方式来做呢?
英文:
I'm creating new inputs dynamically inside an array and each input will have its own id
and register{}
name. To do that, I'm using index
value from array.map()
.
In registerTrip()
function I'm trying to add each input value to an array concatenating counter
number to data.trip_start_date
to be able to get the corresponding value from the input but this process is not working.
I'm not able to concatenate them even if I convert var i
to string.
If I console.log(data.trip_start_date0)
I can get the value but when I console.log(data.trip_start_date + s)
I get undefined0
, undefined1
...
Is this the correct way to do that or I should do it differently?
export function RegisterTrips() {
const { register, handleSubmit, formState: { errors }, reset } = useForm();
const [counter, setCounter] = useState(1);
const createDate = () => {
setCounter(counter + 1);
console.log(counter);
};
const registerTrip = (data: any) => {
const formData = new FormData();
let i;
let s;
let trip_start_date;
const dates = [];
for (i = 0; i < counter; i++) {
console.log(i);
console.log(data.trip_start_date0);
console.log(typeof (data.trip_start_date0));
s = i.toString();
trip_start_date = data.trip_start_date + s;
// dates.push("trip_start_date", data.trip_start_date.${ i });
console.log(data.trip_start_date0);
console.log(trip_start_date);
// console.log(dates);
}
}
return(
...
{
Array.from(Array(counter)).map((e, index) => {
return (
<div className = "flex flex-col gap-2 lg:flex-row w-full">
<div className = "w-full">
<label htmlFor = {`trip_start_date${index}` className = "block mb-2 text-sm text-slate-500"> Trip Date </label>
<input
type = "date"
className = "w-full px-2 py-2 text-sm text-slate-600 border border-slate-300 focus:border-slate-400 focus:outline-none rounded-lg"
id = {`trip_start_date${index}`}
{...register(`trip_start_date${index}`, {required: false})}
/>
</div>
)
})
}
<div className="flex justify-end mt-4 w-full">
<button type='button' className="text-sm text-blue-500 underline cursor-pointer underline-offset-4 active:text-blue-400" onClick={createDate}>Add new date +</button>
</div>
...
)
}
答案1
得分: 1
当你执行 data.trip_start_date + s
时,你试图访问 data.trip_start_date
的值(该值不存在),然后将其与 s
连接起来。而你想要做的是访问 trip_start_date0
(以及1、2、3等)的值。
trip_start_date = data["trip_start_date" + i.toString()];
然而,对于值数组,你应该使用 https://react-hook-form.com/docs/usefieldarray 进行操作。
英文:
When you do data.trip_start_date + s
you are trying to access the value of data.trip_start_date
(which does not exist) and then concatenate that with s
. Whereas what you want to do is access the value of trip_start_date0
(and 1,2,3 etc).
trip_start_date = data["trip_start_date" + i.toString()];
However, you should be aware for arrays of values you are supposed to use https://react-hook-form.com/docs/usefieldarray.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论