@mozartspa/mobx-react alternatives and similar libraries
Based on the "Form Logic" category.
Alternatively, view mobx-form alternatives based on common mentions on social networks and blogs.
-
formik
Build forms in React, without the tears π [Moved to: https://github.com/jaredpalmer/formik] -
react-hook-form
π React Hooks for form state management and validation (Web + React Native) -
react-jsonschema-form
A React component for building Web forms from JSON Schema. -
redux-form
A Higher Order Component using react-redux to keep form state in a Redux store -
Formily
π±π π§© Cross Device & High Performance Normal Form/Dynamic(JSON Schema) Form/Form Builder -- Support React/React Native/Vue 2/Vue 3 -
react-final-form
π High performance subscription-based form state management for React -
surveyjs
Free Open-Source JavaScript form builder library with integration for React, Angular, Vue, jQuery, and Knockout that lets you load and run multiple web forms, or build your own self-hosted form management system, retaining all sensitive data on your servers. You have total freedom of choice as to the backend, because any server + database combination is fully compatible. -
formsy-react
A form input builder and validator for React JS -
react-redux-form
Create forms easily in React with Redux. -
JSONForms
Customizable JSON Schema-based forms with React, Angular and Vue support out of the box. -
winterfell
Generate complex, validated and extendable JSON-based forms in React. -
data-driven-forms
React library for rendering forms. -
react-validation-mixin
Simple validation mixin (HoC) for React. -
plexus-form
A dynamic form component for react using JSON-Schema. -
formcat
A simple and easy way to control forms in React using the React Context API -
MSON-React
React and Material-UI Rendering Layer for MSON -
cerebral-module-forms
Form handling for Cerebral -
react-formawesome
React UI lib for validation forms -
react-client-validation
Simple and super lightweight validation for React. -
Table of Contents
forml - extensible react json schema form generator -
Phormal
Form generation, themes, and validation for web artisans
Appwrite - The Open Source Firebase alternative introduces iOS support
Do you think we are missing an alternative of @mozartspa/mobx-react or a related project?
README
@mozartspa/mobx-react
High performance, hook-based forms library for React, powered by MobX.
Features
- Form level and Field level validation with built-in async debouncing
- Supports multiple error messages per field
- Deeply nested form values (arrays, you're welcome)
- Format and parse values (to support advanced scenarios)
- Powered by MobX
- Built with React hooks
- Written in Typescript
- It's only ~7kB gzipped
Motivation
Why another form library? Simple, I have not found easy to use form libraries that leveraged the high performance of mobx. The mostly used form libraries don't use MobX underneath, and they struggle between performance and ease of use. With MobX you can have both.
Installation
yarn add @mozartspa/mobx-form
Then install the peer-dependencies: mobx and mobx-react-lite
yarn add mobx mobx-react-lite
Links
Quickstart
A minimal example, not exactly what you would use in a real project, but it gives an overall look:
import React from "react"
import { observer } from "mobx-react-lite"
import { useField, useForm } from "@mozartspa/mobx-form"
const App = observer(() => {
const form = useForm({
initialValues: {
name: "",
},
onSubmit: (values) => {
console.log("submitted values", values)
},
})
const nameField = useField("name", { form })
return (
<form onSubmit={form.handleSubmit}>
<div>
<label>Name</label>
<input type="text" {...nameField.input} />
{nameField.isTouched && nameField.error}
</div>
<button type="submit">Submit</button>
</form>
)
})
export default App
Few things to note:
- We import
useForm
anduseField
from the package@mozartspa/mobx-form
. - We wrap our component with
observer()
, since we're using MobX. useForm()
gives us back a stable reference to our form instance.useField()
gives us back a reference to a specific field of our form. We pass it theform
instance, to make it know which form it should be bound to. It's required here, but in other examples we'll leverage the React Context.- With
onSubmit={form.handleSubmit}
we let our form instance handle the onSubmit event. {...nameField.input}
gives the input the necessary props to be a controlled input:name
,value
,onChange
,onBlur
.- With
{nameField.isTouched && nameField.error}
we display the possible error only after the user touched the input. Anyway, in this case there's no input validation.
Credits
Heavily inspired by formik, with some ideas taken from react-form and react-final-form.