Hooks Overview
EFX-Forms provides a comprehensive set of React hooks for accessing form state, methods, and field data. All hooks work within the form context or can target specific forms by name.
Available Hooks
Form Hooks
| Hook | Description | Import |
|---|---|---|
useForm | Get form data and methods combined | efx-forms/useForm |
useFormData | Get form state stores (values, errors, etc.) | efx-forms/useFormData |
useFormInstance | Get raw form instance with all stores and events | efx-forms |
useFormValues | Get form values only | efx-forms/useFormValues |
useFormMethods | Get form methods only (change, reset, submit, etc.) | efx-forms/useFormMethods |
useFormStore | Get single form store by name | efx-forms/useFormStore |
useFormStores | Get multiple form stores by name | efx-forms/useFormStores |
Field Hooks
| Hook | Description | Import |
|---|---|---|
useField | Get field data and methods combined | efx-forms/useField |
useFieldData | Get field state (value, active, error, etc.) | efx-forms/useFieldData |
useFieldStore | Get single field store value | efx-forms/useFieldStore |
Utility Hooks
| Hook | Description | Import |
|---|---|---|
useStoreProp | Get property from any effector store | efx-forms/useStoreProp |
Usage Pattern
All hooks accept an optional formName parameter. When used within a <Form> context, the form name is inferred automatically. When used outside context or targeting a different form, provide the formName explicitly.
import { Form } from 'efx-forms';
import { useForm, useField } from 'efx-forms';
// Inside form context - formName inferred
const InsideForm = () => {
const { values, change } = useForm();
const { value, error } = useField('username');
return <div>{value} - {error}</div>;
};
// Outside context - formName required
const OutsideForm = () => {
const { values, submit } = useForm('my-form');
const { value } = useField('email', 'my-form');
return <button onClick={submit}>Submit</button>;
};
const Page = () => (
<Form name="my-form" onSubmit={console.log}>
<InsideForm />
<OutsideForm />
</Form>
);