How it works
A Repeater is a component that takes an array in form data and renders its child components once per array item. When a user clicks “Add”, a new empty row appears. When they click “Remove”, that row’s data is deleted from the array.Validation per row
Each row validates independently. If row 2 has an invalid email, only row 2 shows the error — the rest of the form remains clean. Validation rules defined inside a Repeater’s children apply per-item. You can also add amin / max items rule on the Repeater itself to enforce “at least 1 contact” or “maximum 10 line items.”
Conditional logic inside rows
Conditional rendering works within each row. For example, show a “Company” field only when the “Type” dropdown is set to “Business”:Pre-populating rows
Pass initial array data viainitialData:
Reading array data
Array data flows throughonFormDataChange like any other field:
viewerRef:
Styling rows
Each row renders inside a container you can style. Target rows via CSS:Common patterns
Invoice line items — product name, quantity, unit price, computed total per row, grand total outside the repeater via computed properties. Multi-address forms — primary/secondary address with “same as primary” checkbox that copies data between rows. Checklist / inspection — dynamic check items with pass/fail/N/A per row, conditional follow-up fields, signature at the bottom.Performance considerations
Repeaters with many rows (50+) can affect render performance. Tips:- Enable virtualization if available in your UI pack
- Minimize computed properties inside rows
- Avoid deep nesting (repeater inside repeater) unless necessary
- Use
React.memowrappers for custom components inside rows
Related
- Repeater component reference
- Using Repeater guide
- Dynamic form fields tutorial
- Validation — per-row and form-level rules
- Conditional logic — per-row conditions