Docs
Examples
Modifications

Modifications

Each form field has its own isModified flag found in the modifications object returned by the form instance.

When the form field current value is not equal to its value defined in the initial property, the isModified flag will be set to true.

By default, that equality is determined with strictly equal operator (===) for primitives, and deep equality for objects.

Value of the initial property can change (be updated) during your form instance lifecycle, and Formeus will update modifications and report only modified fields in your onSubmitForm function.

Also, by default, un-modified fields will get auto-synced to the latest initial values.

import { useForm } from "@formeus/react"
function Profile() {
  /// Fetch profile data
  const profileData = useProfileData()
 
  /// Update initial values with the latest profile data
  const { values, update, submit, modifications } = useForm({
    initial: {
      name: profileData.name,
      address: profileData.address,
    },
    onSubmitForm: (values, meta, modifiedFields) => {
      /// Update only modified fields.
      // return api.updateProfile({ ...modifiedFields })
    },
  })
 
  return (
    <>
      <input
        value={values.name}
        onChange={(e) => update("name", e.target.value)}
      />
      <input
        value={values.address}
        onChange={(e) => update("address", e.target.value)}
      />
      <button onClick={() => submit()}>Update</button>
    </>
  )
}

Comparators

If the default behaviour provides unexpected results, or is not performant enough, you can pass custom comparators property which can define a custom comparator functions for every form field.