Das useFieldArray von React Hook Form kann keine Daten anzeigen
P粉176151589
2023-09-01 23:30:48
<p>
<pre class="brush:php;toolbar:false;"><Box Component="form" onSubmit={handleSubmit(submit)}>
<Rastercontainerabstand={2}>
<Gitterelement xs={12} sm={12} md={12} lg={12}>
<TextField
label="Evnet Name"
Gesamtbreite
{...register("eventName")}
name="eventName"
/>
</Gitter>
<Gitterelement xs={12} sm={12} md={6} lg={6} alignSelf="center">
<TextField
label="Evnet-Veranstaltungsortname"
Gesamtbreite
{...register("eventVenue")}
name="eventVenue"
/>
</Gitter>
<Box sx={{ width: "100%" }}>
<DialogTitel
sx={{ fontWeight: "bold", textTransform: "uppercase" }}
>
Ticketkategorie
</DialogTitle>
</Box>
<Gitterelement xs={12} sm={12} md={5} lg={4}>
<TextField
label="Kategorie"
Gesamtbreite
{...register("ticketCatName")}
name="ticketCatName"
/>
</Gitter>
<Gitterelement xs={12} sm={12} md={3} lg={3}>
<TextField
type="Nummer"
label="Preis"
Gesamtbreite
{...register("ticketCatPrice")}
name="ticketCatPrice"
/>
</Gitter>
<Gitterelement xs={12} sm={12} md={3} lg={3}>
<TextField
type="Nummer"
label="Gesamt"
Gesamtbreite
{...register("ticketCatTotal")}
name="ticketCatTotal"
/>
</Gitter>
Diese Werte erhalte ich, wenn ich das Formular absende.
</Box></pre>
<p>我创建了一个动态表单组件,使用map来显示.</p>
<pre class="brush:php;toolbar:false;">{fields.map((item, index) => {
zurückkehren (
<MoreFields
registrieren={register}
key={item.id}
entfernen={remove}
index={index}
item={item}
Kontrolle={Kontrolle}
/>
);
})}</pre>
<p>Wenn ich das Formular absende, zeigen die Werte im Feldarray keine Daten an, während andere Felder außerhalb des Feldarrays einwandfrei funktionieren. </p>
<p>Dies ist der Code für die Komponente. </p>
<pre class="brush:php;toolbar:false;">import { Box, Grid, IconButton, SVGIcon, TextField } from "@mui/material";
import React von "react";
importiere DeleteIcon aus '@mui/icons-material/Delete';
import { Fragment } aus "react";
const MoreFields = ({ register, delete, index, item }) =>
zurückkehren (
<Fragment key={item.id}>
<Gitterelement xs={12} sm={12} md={5} lg={4}>
<TextField
label="Kategorie"
Gesamtbreite
{...register(`ticketCategory.${index}.ticketCatName`)}
name={`ticketCategory${index}.ticketCatName`}
defaultValue={item.ticketCatName}
/>
</Gitter>
<Gitterelement xs={12} sm={12} md={3} lg={3}>
<TextField
type="Nummer"
label="Preis"
Gesamtbreite
{...register(`ticketCategory.${index}.ticketCatPrice`)}
name={`ticketCategory${index}.ticketCatPrice`}
defaultValue={item.ticketCatPrice}
/>
</Gitter>
<Gitterelement xs={12} sm={12} md={3} lg={3}>
<TextField
type="Nummer"
label="Gesamt"
Gesamtbreite
{...register(`ticketCategory.${index}.ticketCatTotal`)}
name={`ticketCategory${index}.ticketCatTotal`}
defaultValue={item.ticketCatTotal}
/>
</Gitter>
<Gitterelement xs={4} sm={4} md={2} lg={2} alignSelf="center">
<SvgIcon color='error' onClick={()=>remove(index)} sx={{cursor:'pointer'}}>
<DeleteIcon size="medium"
</SvgIcon>
</Gitter>
</Fragment>
);
};
Standard exportieren MoreFields;</pre>
<p>Ich kann Felder hinzufügen und entfernen, aber beim Senden werden die Werte nicht angezeigt. Ich weiß nicht warum, bitte helfen Sie mir. </p>
<p>Die Hooks und Funktionen, die ich verwende.</p>
<pre class="brush:php;toolbar:false;">const { register, handleSubmit, control } = useForm();
const { Felder, anhängen, voranstellen, entfernen, austauschen, verschieben, einfügen } = useFieldArray(
{
Kontrolle,
Name: "ticketCategory",
}
);
const addFields = () => {
append({ TicketCatName: "", TicketCatPrice: "", TicketCatTotal: "" });
};
const subscribe = (data) => {
console.log(data);
};</pre></p>
你应该像这样同时使用相同的名称来注册和命名属性:
React Hook Form需要你在数组名称中添加索引,因为它使用点表示法来访问嵌套字段。例如,假设你有一个像这样的对象数组:
然后,每个输入的名称应该与表单数据中字段的路径相匹配。例如,第一个票类别名称输入应该具有名称
ticketCategory.0.ticketCatName
,第二个票类别价格输入应该具有名称ticketCategory.1.ticketCatPrice
。这样,React Hook Form可以控制输入值到表单数据中。