P粉0468781972023-08-18 09:05:51
您需要更新name
和value
屬性,以包含巢狀欄位的完整路徑
<input name={`${key}.${nestedFieldName}`} // 包含嵌套字段的路径 value={getIn(values, `${key}.${nestedFieldName}`)} // 使用formik的getIn获取嵌套值 onChange={handleChange} placeholder={fieldObj.title} />
您的程式碼只處理了一層巢狀。
對於更深層的嵌套,您需要遞歸地渲染和處理巢狀欄位
{Object.entries(item[key]?.fields).map(([nestedFieldName, fieldObj]) => ( <div style={{ marginLeft: 20 }} key={nestedFieldName}> <p>{fieldObj.title}</p> <input name={`${key}.${nestedFieldName}`} value={getIn(values, `${key}.${nestedFieldName}`)} onChange={handleChange} placeholder={fieldObj.title} /> {fieldObj.fields && ( <div style={{ marginLeft: 20 }}> {Object.entries(fieldObj.fields).map(itemsRender)} </div> )} </div> ))}
最後,不要直接使用handleChange
處理巢狀字段,而應該使用Formik的setFieldValue
來更新巢狀字段的值。
您可以從表單物件存取setFieldValue
:
onChange={(e) => { form.setFieldValue(`${key}.${nestedFieldName}`, e.target.value); }}#