useForm
This hook creates a form, and returns it.
Import
import { useForm } from "@formiz/core";
Basic usage
const form = useForm();
Form values type
You can add a generic type param to useForm to help you using form actions.
type FormValues = { name: string };
const form = useForm<FormValues>();
form.setValues({ name: "" }); // ✅ ok, with autocompletion
form.setValues({ notName: "" }); // ❌ error
Form Config
id
Allows you to pass a custom id, which will be used to create the ids of the fields. The form will be reset when it changes. By default, it is generated automatically.
const form = useForm({ id: "custom-id" });
initialValues
Allows you to pass some initial values to the form. If a field is mounted, it will lookup into this object to set his initial value. This is usefull when you are getting data from an API like an edit page.
const form = useForm({ initialValues: { myField: "my initial value" } });
initialStepName
Allows you to define the initial step.
const form = useForm({ initialStepName: "step-2" });
ready
Allows you to delayed form setup, this can be usefull when you have async initialValues. If it is not defined, ready is true. Everytime ready turn from false to true, the form will be reset to its initial state.
const [data, setData] = useState();
const [isFetched, setIsFetched] = useState(false);
useEffect(() => {
const dataFetch = async () => {
const data = await (await fetch("/api/async-initial-values")).json();
setData(data);
setIsFetched(true);
};
dataFetch();
}, []);
const form = useForm({ ready: isFetched, initialValues: data });
stateSubscription
An object to manage form returned state
const form = useForm({ stateSubscription: [{ only: ["isValid"] }] });
form.isValid; // exists
form.isSubmitted; // doesn't exists
const form = useForm({ stateSubscription: [{ exclude: ["isValid"] }] });
form.isValid; // doesn't exists
form.isSubmitted; // exists
onSubmit(values)
Function triggered on form submission, whether it is valid or not.
const form = useForm({ onSubmit: (values) => console.log({ values }) });
onValidSubmit(values)
Function triggered on form submission, only if it is valid.
const form = useForm({ onValidSubmit: (values) => console.log({ values }) });
onInvalidSubmit(values)
Function triggered on form submission, only if it is invalid.
const form = useForm({ onInvalidSubmit: (values) => console.log({ values }) });
onValuesChange(values)
Function triggered on any form field value change.
const form = useForm({ onValuesChange: (values) => console.log({ values }) });
onValid()
Triggered when the form is valid.
const form = useForm({ onValid: () => console.log("form is valid") });
onInvalid()
Triggered when the form is invalid.
const form = useForm({ onInvalid: () => console.log("form is invalid") });
Form State
isValid
Return true
if all form fields are valid, else return false
.
const form = useForm();
form.isValid;
isValidating
Return true
if at least one field is running async validations, else return false
.
const form = useForm();
form.isValidating;
isSubmitted
Return true
if the form has been submitted, else return false
.
const form = useForm();
form.isSubmitted;
resetKey
A key that change when form is reset.
Allows you to reset some internal state when the form is reset.
const form = useForm();
useEffect(() => {
/* Do a side effect on reset */
}, [form.resetKey]);
currentStep
The name of the current step.
const form = useForm();
form.currentStep;
steps
An array that contains all form steps.
const form = useForm();
form.steps;
isStepPristine
Return true
if all current step fields are pristine, else return false
.
const form = useForm();
form.isStepPristine;
isStepValid
Return true
if all current step fields are valid, else return false
.
const form = useForm();
form.isStepValid;
isStepValidating
Return true
if at least one current step field is running async validations, else
return false
.
const form = useForm();
form.isStepValidating;
isStepSubmitted
Return true
if the current step has been submitted, else return false
.
const form = useForm();
form.isStepSubmitted;
isFirstStep
Return true
if the current step is the first form step, else return false
.
const form = useForm();
form.isFirstStep;
isLastStep
Return true
if the current step is the last form step, else return false
.
const form = useForm();
form.isLastStep;
Form Actions
submit()
Submit whole form.
const form = useForm();
form.submit();
submitStep()
Submit current step.
const form = useForm();
form.submitStep();
setErrors(errors)
Manually set errors on form fields.
const form = useForm();
form.setErrors({ field: "Error" });
setValues(values, options)
Manually set form fields values.
keepPristine
option allows you to choose if setValues
keep unchanged fields pristine state. By default, keepPristine
is false
const form = useForm();
form.setValues({ field: "New value" }, { keepPristine: true });
reset(options)
Reset form's states and values. Options allows you to select the data you want to reset.
Available options: "pristine"
, "submitted"
, "touched"
, "validating"
, "debouncing"
, "resetKey"
, "currentStep"
, "visited"
, "values"
const form = useForm();
form.reset({ only: ["values"] });
form.reset({ exclude: ["pristine"] });
getStepByFieldName(fieldName)
Get step informations from field name.
const form = useForm();
const step = form.getStepByFieldName("field");
goToNextStep()
Navigate to next step.
const form = useForm();
form.goToNextStep();
goToPreviousStep()
Navigate to previous step.
const form = useForm();
form.goToPreviousStep();
goToStep(name)
Navigate to a step.
const form = useForm();
form.goToStep("step-2");
collection(fieldName)
Return methods to manage a field collection, see useCollection()
.
const form = useForm();
const portsCollection = form.collection("ports");
portsCollection.append({ number: "1234" }); // add an element to ports collection