Built-In Event Handlers
- Sync Field Value
- Focused & Touched State
- Clear & Reset Form or Fields
- Nested Array Elements
- Submitting the Form
- Handle Files
- onChange(e) & onToggle(e)
- onFocus(e) & onBlur(e)
- onClear(e) & onReset(e)
- onAdd(e) & onDel(e)
- onSubmit(e)
- onDrop(e)
Custom Event Handlers
Sync Field Value
onChange(e) & onToggle(e)
| Handler | Affected Property | Executed Hook |
|---|---|---|
| onChange(e) | value | onChange |
| onToggle(e) | value | onToggle |
Use the onChange(e) or onToggle(e) handler to update the state of the field.
<input
...
onChange={form.$('username').onChange}
/>
If you are using a custom component which doesn't work with the package's built-in sync handler, open an Issue.
Focused & Touched State
onFocus(e) & onBlur(e)
| Handler | Affected Property | Executed Hook |
|---|---|---|
| onFocus(e) | focused | onFocus |
| onBlur(e) | touched | onBlur |
If you need to track touched or focused state, you can use onFocus(e) or onBlur(e) handlers:
<input
...
onFocus={form.$('username').onFocus}
onBlur={form.$('username').onBlur}
/>
Clear & Reset
onClear(e) & onReset(e)
| Handler | Action | Affected Property | Executed Hook | Result |
|---|---|---|---|---|
| onClear(e) | clear() | value | onClear | to empty values |
| onReset(e) | reset() | value | onReset | to default values |
On the form instance:
<button type="button" onClick={form.onClear}>Clear</button>
<button type="button" onClick={form.onReset}>Reset</button>
or selecting Specific Field or Nested Fields:
<button type="button" onClick={form.$('members').onClear}>Clear</button>
<button type="button" onClick={form.$('members').onReset}>Reset</button>
Nested Array Elements
onAdd(e) & onDel(e)
| Handler | Action | Affected Property | Executed Hook | Result |
|---|---|---|---|---|
| onAdd(e) | add() | fields | onAdd | Add a field |
| onDel(e) | del() | fields | onDel | Remove a field |
Adding a Field
<button type="button" onClick={hobbies.onAdd}>Add Hobby</button>
or using the field selector:
<button type="button" onClick={form.$('hobbies').onAdd}>Add Hobby</button>
or specify the field value as second argument:
<button type="button" onClick={e => form.$('hobbies').onAdd(e, 'soccer')}>Add Hobby</button>
Deleting a Field
<button type="button" onClick={hobby.onDel}>Delete Hobby</button>
or using the field selector with a field key:
<button type="button" onClick={form.$('hobbies').$(3).onDel}>Delete Hobby</button>
or specify the field path as second argument:
<button type="button" onClick={e => form.onDel(e, 'hobbies[3]')}>Delete Hobby</button>
Submitting the Form
onSubmit(e)
| Handler | Action | Affected Property | Executed Hook | FORM | FIELD |
|---|---|---|---|---|---|
| onSubmit(e) | submit() > validate() | submitting, validating | onSubmit | YES | YES |
The onSubmit(e) will validate the form and will call respectively onSuccess(form) or onError(form) Validation Hooks if they are implemented.
The onSuccess(form) and onError(form) methods takes the form object in input. So you can perform more actions after the validation occurs.
You can easly include the onSubmit(e) handler in your component:
<button type="submit" onClick={form.onSubmit}>Submit</button>
Handle Files
onDrop(e)
| Handler | Affected Property | Executed Hook | Result |
|---|---|---|---|
| onDrop(e) | files | onDrop | Retrieve the files |
The onDrop(e) Event Handler will retrive the files into the files Field prop and exeute the onDrop Hook function.
Define the field type property as file and then use bind() on your input:
<input multiple=true {...field.bind()} />
Otherwise, (without defining the type prop) delegate the input onChange Handler with the onDrop(e) Handler on the bind() method (or create a custom bindings).
<input
multiple=true
{...field.bind({
onChange: field.onDrop,
})}
/>