formcat alternatives and similar libraries
Based on the "Form Logic" category.
Alternatively, view formcat alternatives based on common mentions on social networks and blogs.
-
formik
DISCONTINUED. Build forms in React, without the tears π [Moved to: https://github.com/jaredpalmer/formik] -
Formily
π±π π§© Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 -
surveyjs
SurveyJS Form Library is a JavaScript form rendering and validation engine that takes a JSON schema and dynamically generates interactive forms using a framework-independent core. It runs entirely on the client, handling UI rendering, conditional logic, and validation, while giving you full control over data storage and submission on your backend. The same form model can be rendered through dedicated, natively supported packages for React, Angular, Vue, or vanilla JavaScript without changing the schema. In practice, you define forms as JSON, pass them to the library, and handle submission events to persist or process the results wherever you choose.
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of formcat or a related project?
README
A simple and easy way to control forms in React using the React Context API
Getting Started
Install
With npm
npm install --save formcat
With yarn
yarn add formcat
How to use
First of all, we need to create a Field using the HOC withContextForm as the example below:
/* InputField.js */
import { withContextForm } from 'formcat'
const InputField = ({ error, ...input }) => (
<input {...input} />
)
export default withContextForm(InputField)
Now we can use this component inside the Form:
import { Form } from 'formcat'
import InputField from './InputField'
function Main () {
return (
<Form>
<InputField name="whatever" />
</Form>
)
}
API
Form
| Props | Type | Default value | Description |
|---|---|---|---|
| keyUpValidation | Boolean | false |
When true the validations Field works with keyUp |
| clearAfterSubmit | Boolean | false |
When true the form will be reset after submit |
| onFormChange | Function | undefined |
A callback that returns an object with name, type and value of the current change. |
| onSubmit | Function | undefined |
A callback that returns an object with status and values. |
Submit
For an easy submit process we can use the HOC withSubmit and create a Button that will be controlled by Form, or using the Submit component that already exists.
// Creating
import { withSubmit } from 'formcat'
const Submit = withSubmit(props => <button {...props} />)
//or
import { Submit } from 'formcat'
// Using
...
render (
<Form>
...
<Submit> Button Text </Submit>
</Form>
)
...
Obs: This button will be enabled when Form is valid and disabled when is not valid
Custom Field
It's a field created with withContextForm.
| Props | Type | Default value | Description |
|---|---|---|---|
| error | Boolean | false |
A flag that controls the field validation |
| validations | Array | [] |
A list with functions validation |
| required | Boolean | false |
Set required validation for this field |
| defaultValue | String | "" |
Set initial text value |
| defaultChecked | String | "" |
Set initial checked for field |
Using validations
We can use many validations per field using the props validations. All we need to do is create a pure function that returns true or false following the example below:
import { Form, withFormContext } from 'formcat'
const Field = withFormContext(({ error, ...input }) => (
<input {...input} />
))
const Main = () => {
// Validate if username is @guilouro
const usernameValidation = value => (
value === '@guilouro'
)
return (
<Form>
<Field
name="username"
validations={[usernameValidation]}
/>
</Form>
)
}
A validation function has two params value and state:
function validationName (value, state) {}
| Param | Type | Description |
|---|---|---|
| value | String | Current field value |
| state | Object | An object with all fields value |
Set values
We can set values out of Form using Ref and updateFieldValue as the example below:
| Param | Type | Description |
|---|---|---|
| name | String | null |
| text | String | A new value for this field |
import { Form, withFormContext } from 'formcat'
const Field = withFormContext(({ error, ...input }) => {}(
<input {...input} />
))
const Main = () => {
const form = useRef(null)
const setValue = () => {
form.current.updateFieldValue('username', '@guilouro')
}
return (
<>
<Form ref={ref}>
<Field name="username" />
</Form>
<button onClick={setValue}>
Set @guilouro as value
</button>
</>
)
}
Fields we can use
There are some simple field created with withContexForm we can use in project or use as a reference for create a new custon field
InputField
A simple input field
import { InputField } from 'formcat/fields'
...
<InputField
label="My Input"
name="my-select"
/>
...
| Param | Type | Default value | Description |
|---|---|---|---|
| name | String | null |
Field name |
| label | String | '' |
A label for this field |
| type | String | text |
A type for this input |
Obs: And all common props
CheckboxField
A input checkbox field
import { CheckboxField } from 'formcat/fields'
...
<CheckboxField
label="My Input"
name="my-select"
/>
...
| Param | Type | Default value | Description |
|---|---|---|---|
| name | String | null |
Field name |
| label | String | '' |
A label for this field |
| defaultChecked | Boolean | false |
A flag to define the initial status |
Obs: And all common props
RadiosField
A simple input radio field
import { RadiosField } from 'formcat/fields'
...
<RadiosField
label="My Select"
name="my-select"
options={[
{ label: 'Item 1', value: 1 },
{ label: 'Item 2', value: 2, checked: true }
]}
/>
...
| Param | Type | Default value | Description |
|---|---|---|---|
| name | String | null |
Field name |
| label | String | '' |
A label for this field |
| options | Array | [] |
A list of objects with label, value and checked |
Obs: And all common props
SelectField
A simple select field
import { SelectField } from 'formcat/fields'
...
<SelectField
label="My Select"
name="my-select"
options={[
{ label: 'Item 1', value: 1 }
]}
/>
...
| Param | Type | Default value | Description |
|---|---|---|---|
| name | String | null |
Field name |
| label | String | '' |
A label for this field |
| options | Array | [] |
A list of objects with label and value |
Obs: And all common props
TextField
A simple textarea field
import { TextareaField } from 'formcat/fields'
...
<TextareaField
label="My Text"
name="my-text"
/>
...
| Param | Type | Default value | Description |
|---|---|---|---|
| name | String | null |
Field name |
| label | String | '' |
A label for this field |
Obs: And all common props
Error styles
Invalid fields will receive a class: className="formcat-error"
Examples
Full form
A example with all fields, validation and a populate button
Creating a custom fields
A example of the how create a custom field
Contributing
If you want to contribute with this component: Contributing Documentation.