Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: ShapeForm – Schema Driven Forms for React (github.com)
118 points by mcat 50 days ago | hide | past | web | favorite | 16 comments



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).

https://github.com/final-form/react-final-form

I couldn't easily find a demo of your stuff, but one thing they've really gotten right is the renders for field updates...

https://final-form.org/docs/react-final-form/examples/subscr...



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.

Author talks about it here https://www.youtube.com/watch?v=Ovg9CYwWFBM&t=6s


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.

[0] https://responsevault.com/ [1] https://github.com/mozilla-services/react-jsonschema-form


Signed up for alpha. Definitely sparked my curiosity regarding the type of client needs you encounter for things like form builders.

We are currently working on our own visual app builder, starting out with Vue/Vuetify. Demo:

https://youtu.be/6ywDYebcxdo

https://youtu.be/jdb0j_vN9RM


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.

[1] http://www.alpacajs.org

[2] http://formapi.io


I like it. I moved away from react (and all other frameworks) but I wish I had this 4 years ago when I was exclusively building react apps.


This is pretty darned cool. Really strong example of how to walk through a set of slides exploring why to build a new form library, too.


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.


Also check out uniforms [0] which integrates nicely with other Schema libraries

[0] https://github.com/vazco/uniforms


No hooks (yet). Just starting to figure out typescript.

Should just base this project around https://final-form.org/react


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..


Disclosure: I work on Tree Notation.

Down the line (maybe in 2020) you might want to consider looking at using Tree Notation instead of JSONSchema. Could simplify things quite a bit.

Here's what that might look like, using your example on your Readme:

http://treenotation.org/designer/#grammar%0A%20shapeFormNode...




Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: