React Hook Form的useFieldArray无法显示数据
P粉176151589
P粉176151589 2023-09-01 23:30:48
[React讨论组]
<p>大家好,我使用React Hook Form和useFieldArray Hook创建了一个Material UI表单。</p> <pre class="brush:php;toolbar:false;">&lt;Box component=&quot;form&quot; onSubmit={handleSubmit(submit)}&gt; &lt;Grid container spacing={2}&gt; &lt;Grid item xs={12} sm={12} md={12} lg={12}&gt; &lt;TextField label=&quot;Evnet Name&quot; fullWidth {...register(&quot;eventName&quot;)} name=&quot;eventName&quot; /&gt; &lt;/Grid&gt; &lt;Grid item xs={12} sm={12} md={6} lg={6} alignSelf=&quot;center&quot;&gt; &lt;TextField label=&quot;Evnet Venue Name&quot; fullWidth {...register(&quot;eventVenue&quot;)} name=&quot;eventVenue&quot; /&gt; &lt;/Grid&gt; &lt;Box sx={{ width: &quot;100%&quot; }}&gt; &lt;DialogTitle sx={{ fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot; }} &gt; Ticket Category &lt;/DialogTitle&gt; &lt;/Box&gt; &lt;Grid item xs={12} sm={12} md={5} lg={4}&gt; &lt;TextField label=&quot;Category&quot; fullWidth {...register(&quot;ticketCatName&quot;)} name=&quot;ticketCatName&quot; /&gt; &lt;/Grid&gt; &lt;Grid item xs={12} sm={12} md={3} lg={3}&gt; &lt;TextField type=&quot;number&quot; label=&quot;Price&quot; fullWidth {...register(&quot;ticketCatPrice&quot;)} name=&quot;ticketCatPrice&quot; /&gt; &lt;/Grid&gt; &lt;Grid item xs={12} sm={12} md={3} lg={3}&gt; &lt;TextField type=&quot;number&quot; label=&quot;Total&quot; fullWidth {...register(&quot;ticketCatTotal&quot;)} name=&quot;ticketCatTotal&quot; /&gt; &lt;/Grid&gt; This Values I am getting when I submit the form. &lt;/Box&gt;</pre> <p>我创建了一个动态表单组件,使用map来显示。</p> <pre class="brush:php;toolbar:false;">{fields.map((item, index) =&gt; { return ( &lt;MoreFields register={register} key={item.id} remove={remove} index={index} item={item} control={control} /&gt; ); })}</pre> <p>当我提交表单时,fields数组中的值不显示数据,而fields数组之外的其他字段正常工作。</p> <p>这是组件的代码。</p> <pre class="brush:php;toolbar:false;">import { Box, Grid, IconButton, SvgIcon, TextField } from &quot;@mui/material&quot;; import React from &quot;react&quot;; import DeleteIcon from '@mui/icons-material/Delete'; import { Fragment } from &quot;react&quot;; const MoreFields = ({ register, remove, index, item }) =&gt; { return ( &lt;Fragment key={item.id}&gt; &lt;Grid item xs={12} sm={12} md={5} lg={4}&gt; &lt;TextField label=&quot;Category&quot; fullWidth {...register(`ticketCategory.${index}.ticketCatName`)} name={`ticketCategory${index}.ticketCatName`} defaultValue={item.ticketCatName} /&gt; &lt;/Grid&gt; &lt;Grid item xs={12} sm={12} md={3} lg={3}&gt; &lt;TextField type=&quot;number&quot; label=&quot;Price&quot; fullWidth {...register(`ticketCategory.${index}.ticketCatPrice`)} name={`ticketCategory${index}.ticketCatPrice`} defaultValue={item.ticketCatPrice} /&gt; &lt;/Grid&gt; &lt;Grid item xs={12} sm={12} md={3} lg={3}&gt; &lt;TextField type=&quot;number&quot; label=&quot;Total&quot; fullWidth {...register(`ticketCategory.${index}.ticketCatTotal`)} name={`ticketCategory${index}.ticketCatTotal`} defaultValue={item.ticketCatTotal} /&gt; &lt;/Grid&gt; &lt;Grid item xs={4} sm={4} md={2} lg={2} alignSelf=&quot;center&quot;&gt; &lt;SvgIcon color='error' onClick={()=&gt;remove(index)} sx={{cursor:'pointer'}}&gt; &lt;DeleteIcon size=&quot;medium&quot; /&gt; &lt;/SvgIcon&gt; &lt;/Grid&gt; &lt;/Fragment&gt; ); }; export default MoreFields;</pre> <p>我可以添加和删除字段,但是当提交时,值不会显示。不知道为什么,请帮帮我。</p> <p>我正在使用的hooks和函数。</p> <pre class="brush:php;toolbar:false;">const { register, handleSubmit, control } = useForm(); const { fields, append, prepend, remove, swap, move, insert } = useFieldArray( { control, name: &quot;ticketCategory&quot;, } ); const addFields = () =&gt; { append({ ticketCatName: &quot;&quot;, ticketCatPrice: &quot;&quot;, ticketCatTotal: &quot;&quot; }); }; const submit = (data) =&gt; { console.log(data); };</pre></p>
P粉176151589
P粉176151589

全部回复(1)
P粉250422045

你应该像这样同时使用相同的名称来注册和命名属性:

<TextField
  label="Category"
  fullWidth
  {...register(`ticketCategory.${index}.ticketCatName`)}
  name={`ticketCategory.${index}.ticketCatName`}
  defaultValue={item.ticketCatName}
/>;

React Hook Form需要你在数组名称中添加索引,因为它使用点表示法来访问嵌套字段。例如,假设你有一个像这样的对象数组:

{
  "ticketCategory": [
    {
      "ticketCatName": "A",
      "ticketCatPrice": 10,
      "ticketCatTotal": 100
    },
    {
      "ticketCatName": "B",
      "ticketCatPrice": 20,
      "ticketCatTotal": 200
    }
  ]
}

然后,每个输入的名称应该与表单数据中字段的路径相匹配。例如,第一个票类别名称输入应该具有名称ticketCategory.0.ticketCatName,第二个票类别价格输入应该具有名称ticketCategory.1.ticketCatPrice。这样,React Hook Form可以控制输入值到表单数据中。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号