无法更新fieldArray元素

时间:2018-11-03 19:06:30

标签: javascript reactjs forms formik

我正在尝试使用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接收)与组件相比有所不同。

0 个答案:

没有答案