大家好,我使用React Hook Form和useFieldArray Hook建立了一個(gè)Material UI表單。
<網(wǎng)格容器間距={2}> <網(wǎng)格項(xiàng) xs={12} sm={12} md={12} lg={12}> <文字字段 label="Evnet 名稱(chēng)" 全螢?zāi)粚挾? {...註冊(cè)(“事件名稱(chēng)”)} name="事件名稱(chēng)" >> </網(wǎng)格> <網(wǎng)格項(xiàng) xs={12} sm={12} md={6} lg={6}alignSelf=“center”> <文字字段 label="Evnet 場(chǎng)地名稱(chēng)" 全螢?zāi)粚挾? {...註冊(cè)(“事件地點(diǎn)”)} name="活動(dòng)地點(diǎn)" >> </網(wǎng)格> <框sx={{寬度:“100%” }}> <對(duì)話框標(biāo)題 sx={{ fontWeight: “粗體”, textTransform: “大寫(xiě)”; }} > 門(mén)票類(lèi)別 </對(duì)話框標(biāo)題> </框> <網(wǎng)格項(xiàng)xs={12} sm={12} md={5} lg={4}> <文字字段 標(biāo)籤=“類(lèi)別” 全螢?zāi)粚挾? {...註冊(cè)(“ticketCatName”)} name="ticketCatName"; >> </網(wǎng)格> <網(wǎng)格項(xiàng)xs={12} sm={12} md={3} lg={3}> <文字字段 類(lèi)型=“數(shù)字” label="價(jià)格"; 全螢?zāi)粚挾? {...註冊(cè)(“ticketCatPrice”)} name="ticketCatPrice"; >> </網(wǎng)格> <網(wǎng)格項(xiàng)xs={12} sm={12} md={3} lg={3}> <文字字段 類(lèi)型=“數(shù)字” 標(biāo)籤=“總計(jì)” 全螢?zāi)粚挾? {...註冊(cè)(“ticketCatTotal”)} name=“ticketCatTotal” >> </網(wǎng)格> 這是我提交表單時(shí)得到的值。 </框></pre> <p>我創(chuàng)建了一個(gè)動(dòng)態(tài)表單元件,使用地圖來(lái)顯示。</p> <pre class="brush:php;toolbar:false;">{fields.map((item, index) => { return ( <MoreFields register={register} key={item.id} remove={remove} index={index} item={item} control={control} /> ); })}</pre> <p>當(dāng)我提交表單時(shí),fields數(shù)組中的值不顯示數(shù)據(jù),而fields數(shù)組之外的其他字段正常工作。 </p> <p>這是組件的程式碼。 </p> <pre class="brush:php;toolbar:false;">import { Box, Grid, IconButton, SvgIcon, TextField } from "@mui/material"; import React from "react"; import DeleteIcon from '@mui/icons-material/Delete'; import { Fragment } from "react"; const MoreFields = ({ register, remove, index, item }) => { return ( <Fragment key={item.id}> <Grid item xs={12} sm={12} md={5} lg={4}> <TextField label="Category" fullWidth {...register(`ticketCategory.${index}.ticketCatName`)} name={`ticketCategory${index}.ticketCatName`} defaultValue={item.ticketCatName} /> </Grid> <Grid item xs={12} sm={12} md={3} lg={3}> <TextField type="number" label="Price" fullWidth {...register(`ticketCategory.${index}.ticketCatPrice`)} name={`ticketCategory${index}.ticketCatPrice`} defaultValue={item.ticketCatPrice} /> </Grid> <Grid item xs={12} sm={12} md={3} lg={3}> <TextField type="number" label="Total" fullWidth {...register(`ticketCategory.${index}.ticketCatTotal`)} name={`ticketCategory${index}.ticketCatTotal`} defaultValue={item.ticketCatTotal} /> </Grid> <Grid item xs={4} sm={4} md={2} lg={2} alignSelf="center"> <SvgIcon color='error' onClick={()=>remove(index)} sx={{cursor:'pointer'}}> <DeleteIcon size="medium" /> </SvgIcon> </Grid> </Fragment> ); }; export default MoreFields;</pre> <p>我可以新增和刪除字段,但是當(dāng)提交時(shí),值不會(huì)顯示。不知道為什麼,請(qǐng)幫幫我。 </p> <p>我正在使用的hooks和函數(shù)。</p> const { 註冊(cè)、handleSubmit、控制 } = useForm(); const { 字段、追加、前置、刪除、交換、移動(dòng)、插入 } = useFieldArray( { 控制, 名稱(chēng):“門(mén)票類(lèi)別”, } ); const addFields = () =>; { 追加({ticketCatName:“”,ticketCatPrice:“”,ticketCatTotal:“”}); }; const 提交 = (資料) => { 控制臺(tái).log(資料); };</pre></p>
你應(yīng)該同時(shí)使用相同的名稱(chēng)來(lái)註冊(cè)和命名屬性:
<TextField label="Category" fullWidth {...register(`ticketCategory.${index}.ticketCatName`)} name={`ticketCategory.${index}.ticketCatName`} defaultValue={item.ticketCatName} />;
React Hook Form需要你在陣列名稱(chēng)中加入索引,因?yàn)樗褂命c(diǎn)表示法來(lái)存取巢狀欄位。例如,假設(shè)你有一個(gè)像這樣的物件數(shù)組:
{ "ticketCategory": [ { "ticketCatName": "A", "ticketCatPrice": 10, "ticketCatTotal": 100 }, { "ticketCatName": "B", "ticketCatPrice": 20, "ticketCatTotal": 200 } ] }
然後,每個(gè)輸入的名稱(chēng)應(yīng)該與表單資料中欄位的路徑相符。例如,第一個(gè)票類(lèi)別名稱(chēng)輸入應(yīng)該具有名稱(chēng)ticketCategory.0.ticketCatName
,第二個(gè)票類(lèi)別價(jià)格輸入應(yīng)該具有名稱(chēng)ticketCategory.1.ticketCatPrice
。這樣,React Hook Form可以控制輸入值到表單資料中。