我正在尝试使用 React.js 和 Formik 库创建一个动态表单。问题是我无法更新服务数组,除了第一个数组元素。
我的表单模型如下所示:
{
name: ''
services: [{ name: '', comment: '' }],
}
我的表单必须有一个包含两个字段(名称和评论)的服务数组。服务名称生成为特定列表中的单选按钮。这是代码:
<FieldArray
name="services"
render={arrayHelpers => (
<div>
{values.services.map((serviceX, index) => (
<div key={index}>
{serviceList.map((service, serviceIndex) => (
<div className="col col--md-4" key={serviceIndex}>
<div className="radio--container">
<input
name={`services.${index}.name`}
type="radio"
id={service.label}
value={
services
? services.find(
service => service.value === values.services[index].name
)
: ''
}
checked={service.value === values.services[index].name}
onChange={() =>
setFieldValue(
`services.${index}.name`,
service.value
)
}
onBlur={handleBlur}
/>
<label htmlFor={service.label}>{service.label}</label>
<div className="check">
<div className="inside" />
</div>
</div>
</div>
))}
<Field name={`services.${index}.comment`} />
<button
type="button"
onClick={() => arrayHelpers.remove(index)}
>
-
</button>
</div>
))}
<button
type="button"
onClick={() => arrayHelpers.push({ name: '', comment: '' })}
>
+
</button>
</div>
)}
/>
我还尝试制作一个单独的无状态组件来生成服务列表(单选按钮),但得到了相同的结果。但是,使用单独的无状态组件时,我注意到与组件相比,DOM 中的索引值(从 props 接收)是不同的。