Rumah > Soal Jawab > teks badan
P粉0468781972023-08-18 09:05:51
Anda perlu mengemas kini atribut name
和value
untuk memasukkan laluan penuh ke medan bersarang
<input name={`${key}.${nestedFieldName}`} // 包含嵌套字段的路径 value={getIn(values, `${key}.${nestedFieldName}`)} // 使用formik的getIn获取嵌套值 onChange={handleChange} placeholder={fieldObj.title} />
Kod anda hanya mengendalikan satu tahap sarang.
Untuk sarang yang lebih dalam, anda perlu membuat dan memproses medan bersarang secara rekursif
{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> ))}
Akhir sekali, jangan gunakan handleChange
处理嵌套字段,而应该使用Formik的setFieldValue
terus untuk mengemas kini nilai medan bersarang.
Anda boleh mengakses setFieldValue
dari objek bentuk:
onChange={(e) => { form.setFieldValue(`${key}.${nestedFieldName}`, e.target.value); }}