Andrew from TakeShape here! The primary author of this library. We tired a number of different form libraries before settling on writing our own. You can check out a full talk I gave on ShapeForm (https://www.youtube.com/watch?v=iplY8Le1zK0) or you can just read my slides (https://shape-form-talk.netlify.com/) from the talk.
ShapeForm has several nice features that make it perfect for our use case, and may yours:
JSON Schema validation - Easily share the same form validation frontend and backend
️ Fast - Pure components for fast rendering even with large forms
Redux / Standalone state management - Choose your own adventure
Custom widgets - Widgets are simply React components
Form reducers - Useful for async validation, data normalization, the sky's the limit.
If you find ShapeForm useful or want to make it more useful I'd love for you to contribute to the project!
Oi! Thanks for this. Really great work. Forms and Data tables are two major sore points for me in react land. I've been wanting to see something with json schema other than the mozilla project (which as you said, has weird dependencies).
Any reason for not building around react-final-form as a basis? So far, I've found that one to be my favorite. Zero dependencies and tiny (especially compared with the alternatives).
There is also https://frontier-forms.dev inspired by react-jsonschema-form. It generates forms based on your graphql schema with types in typescript. It is pretty cool too. Based on final-form.
If you look through the slides mentioned by the author (https://shape-form-talk.netlify.com/), comparison is provided for redux-form and react-jsonschema-form. They had to create it to support multi-part forms, redux, easy customizations without bootstrap.
It's great to see more libraries that deal with rendering JSONSchema. I've been working on a drag and drop formbuilder / grid [0] for creating crud apps that leverages react-jsonschema-form.[1]
I noticed that while I create custom rails apps for clients, they often want to create additional forms and still leverage the authentication, permissions, and existing data in the app. This rules out most 3rd party form builders like typeform, jotform etc. which are mostly for surveys anyway. Sometimes the dev time to create them(UI, DB migrations, testing, validations) is too costly for an idea they just want to test.
So, I use the builder to create a JSON Schema, then embed the form into the rails app. What's cool is that I can utilize permissions from the core app to disable certain fields, and I can pass in enum values so drop downs have up-to-date options pulled right from the DB.
We use react-jsonschema-form, but the jsonschema we produce could be used in any of the tools mentioned in this thread.
I'm close to opening this up to other devs soon, and would love your feedback. There's a signup form on the website if you're interested.
Wow this looks awesome! I've been using Alpaca.js [1] at FormAPI [2], which is also a JSON Schema form builder. This looks much better, and much easier to customize, since I already use React / Redux / React DnD for other parts of the application. I was also looking at react-jsonschema-form, but agree with all the downsides they mentioned in the talk (hard to customize, requires Bootstrap, hard to use with Redux, etc.)
So I think I will definitely switch to ShapeForm in the future, and I was actually planning to build something like this myself. I'm definitely looking forward to the TypeScript support.
Looks nice! Our forms have a lot of logic where certain answers hide/show other fields/sections. Does this have the ability to swap the schema/form fields on the fly?
JSON schema has in one of it's drafts a way to define business rules like these, no idea if this library supports it (most likely not)
On a previous project I needed something like this and used react-json-schema as a form renderer and created my own rule engine that evaluated a lot of rules defined in a custom format I needed.
The result was a generated schema that was rendered by react-json-schema.
Sorry to say, but it looks deprecated already. ES6, pure components, redux(without hooks), etc.. It's sad, but JS community is just moving too fast. We build things for today, not tomorrow..
ShapeForm has several nice features that make it perfect for our use case, and may yours:
JSON Schema validation - Easily share the same form validation frontend and backend
️ Fast - Pure components for fast rendering even with large forms
Redux / Standalone state management - Choose your own adventure
Custom widgets - Widgets are simply React components
Form reducers - Useful for async validation, data normalization, the sky's the limit.
If you find ShapeForm useful or want to make it more useful I'd love for you to contribute to the project!