Capítulo 30 de 39
FieldArray (7.81.0+) is useFieldArray packaged as a headless render-prop component: same props, same return shape (fields, append, prepend, insert, swap, move, update, replace, remove), delivered through a render callback instead of a hook call.
useFieldArray returns and must return a React element.field.id (not index) as the component key, no flat/primitive arrays, shouldUnregister: true unsupported, mutation calls need full (non-partial) row objects.useFieldArray — fields stays populated with disabled: true per entry, mutation methods become no-ops.<FieldArray
control={control}
name="test"
render={({ fields, append, remove }) => (
<>
{fields.map((field, index) => (
<div key={field.id}>
<input {...register(`test.${index}.value`)} />
<button type="button" onClick={() => remove(index)}>Delete</button>
</div>
))}
<button type="button" onClick={() => append({ value: "" })}>Append</button>
</>
)}
/>
useFieldArray, expressed declaratively as a render prop.render: it fires on every render, not on a lifecycle event.useFieldArray anti-patterns apply: index as key, partial mutation payloads, shouldUnregister: true.FieldArray and useFieldArray are interchangeable — pick based on whether a render-prop or a hook fits the surrounding component better.useFieldArray's rules and mutation methods carries over unchanged.render callback.