Skip to content

API — driven-form/react

Requires React 18 or newer as a peer dependency. Import these from driven-form/react.

BlockFieldProvider(__namedParameters: object): Element
ParameterTypeDescription
__namedParametersobject
createFieldRegistry(): FieldRegistry
DrivenForm(__namedParameters: DrivenFormProps): Element | null
ParameterTypeDescription
__namedParametersDrivenFormProps
DrivenFormField(__namedParameters: DrivenFormFieldProps): Element | null
ParameterTypeDescription
__namedParametersDrivenFormFieldProps
FieldComponentSuspense(__namedParameters: FieldComponentSuspenseProps): Element
ParameterTypeDescription
__namedParametersFieldComponentSuspenseProps
RenderDynamicFields(__namedParameters: RenderDynamicFieldsProps): Element
ParameterTypeDescription
__namedParametersRenderDynamicFieldsProps
useBlockField(__namedParameters: UseBlockFieldProps): UseBlockFieldReturn
ParameterTypeDescription
__namedParametersUseBlockFieldProps
useBlockFieldContext(): BlockFieldContextValue
useDynamicField(__namedParameters: UseDynamicFieldProps): UseDynamicFieldReturn
ParameterTypeDescription
__namedParametersUseDynamicFieldProps
useFieldRegistry(): FieldRegistry | null

The nearest field registry, or null outside a RenderDynamicFields tree

useFocusRef(focusDelay: number): [RefFunc, FocusElem, () => void, (name: string, element: Element | null) => void]
ParameterTypeDescription
focusDelaynumberms to wait after scrollIntoView before calling .focus() (scrollIntoView is async; a small delay ensures the element is in view first)
useRepeaterField(__namedParameters: UseRepeaterFieldProps): UseRepeaterFieldReturn
ParameterTypeDescription
__namedParametersUseRepeaterFieldProps
PropertyTypeDescription
dataFormDataCurrent form data — pass form.data / the bag’s data
errorsRecord<string, string>Current validation errors — pass form.errors / the bag’s errors
fieldFallback?ReactNodeSuspense fallback while a lazy field component is loading
fieldRegistry?FieldRegistryField type-to-component registry. Optional when rendered inside a RenderDynamicFields subtree (inherited via context); required otherwise — e.g. as a sibling of RenderDynamicFields.
isValidating?Record<string, boolean>Per-field async validation in-flight status — pass form.isValidating / the bag’s isValidating
namestringThe field’s name, as declared in the schema
onUnregistered?'warn' | 'throw' | 'silent'What to do when name isn’t in the schema, or its type has no registered component. - ‘warn’ (default) — console.warn + render nothing - ‘throw’ — throw an Error (useful in development) - ‘silent’ — render nothing, no warning
refFunc?RefFuncRef callback — pass form.refFunc / the bag’s refFunc to enable scroll-to-error
PropertyTypeDescription
children?ReactNode | (bag: DrivenFormBag) => ReactNodeChildren rendered below the form fields — typically a submit button.
fieldFallback?ReactNode
fieldRegistryFieldRegistryRegistry mapping field type strings to React components
onFormLoad?(formId: string | number | undefined) => voidCalled after the schema is parsed. Receives the schema id.
onSave(params: OnSaveParams) => voidCalled after all validation passes on submit
onUnregistered?UnregisteredFieldBehaviour
schemaDrivenFormSchema | null | undefinedSchema from your backend API. Pass null or undefined to render nothing (useful while the schema is loading). When this prop changes, the form resets and reloads with the new schema.
unregisteredFallback?ComponentType<object>
validatorRegistry?ValidatorRegistryCustom validator registry. If omitted, the built-in registry is used.
PropertyTypeDescription
childrenReactNode
fallback?ReactNodeRendered while the lazy component is loading. Defaults to null.
namestringField name — used as the tracking key
PropertyTypeDescription
dataFormDataCurrent form data from useDynamicField
errorsRecord<string, string>Current validation errors from useDynamicField
fieldFallback?ReactNodeRendered inside each field’s Suspense boundary while its lazy component is loading. Defaults to null (nothing shown while loading).
fieldRegistry?FieldRegistryField type-to-component registry from createFieldRegistry. Optional when rendering inside another RenderDynamicFields (e.g. a repeater row) — the registry is inherited via context in that case.
isValidating?Record<string, boolean>Per-field async validation in-flight status — pass form.isValidating here. Each field receives its own slice as the isFieldValidating prop.
onUnregistered?UnregisteredFieldBehaviourWhat to do when a field type has no registered component. - ‘warn’ (default) — console.warn + skip - ‘throw’ — throw an Error (useful in development) - ‘silent’ — skip silently - ‘custom’ — render unregisteredFallback
refFunc?RefFuncRef callback from useDynamicField — enables scroll-to-error on submit
treeFieldData[]Parsed node tree from useDynamicField — already sorted by order at every level
unregisteredFallback?ComponentType<object>Rendered for unregistered field types when onUnregistered is ‘custom’
PropertyTypeDescription
fieldFallback?ReactNodeShown inside each row field’s Suspense boundary while lazy components load
repeaterUseRepeaterFieldReturnThe handle returned by useRepeaterField
rowRepeaterRowDataThe row to render (from repeater.rows)

const