Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/insin/newforms
Isomorphic form-handling for React
https://github.com/insin/newforms
unmaintained
Last synced: 2 days ago
JSON representation
Isomorphic form-handling for React
- Host: GitHub
- URL: https://github.com/insin/newforms
- Owner: insin
- License: other
- Created: 2011-02-04T23:05:01.000Z (over 13 years ago)
- Default Branch: react
- Last Pushed: 2017-08-31T01:18:54.000Z (about 7 years ago)
- Last Synced: 2024-10-17T15:49:28.473Z (17 days ago)
- Topics: unmaintained
- Language: JavaScript
- Homepage: http://newforms.readthedocs.org/
- Size: 6.53 MB
- Stars: 642
- Watchers: 25
- Forks: 48
- Open Issues: 55
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-react-components-all - newforms - INACTIVE] Isomorphic form-handling for React. (Uncategorized / Uncategorized)
- awesome-react - newforms - Isomorphic form-handling for React
- awesome-list - newforms - INACTIVE] Isomorphic form-handling for React. (Code Design / Form Logic)
- awesome-react-components - newforms - INACTIVE] Isomorphic form-handling for React. (Code Design / Form Logic)
- starred-awesome - newforms - Isomorphic form-handling for React (JavaScript)
README
# newforms [![travis status](https://secure.travis-ci.org/insin/newforms.png)](http://travis-ci.org/insin/newforms)
An isomorphic form-handling library for [React](http://facebook.github.io/react/).
(Formerly a direct port of the [Django](http://www.djangoproject.com) framework's `django.forms` library)
## Other React Form Libraries
* [react-formal](https://github.com/jquense/react-formal) - uses a schema and leverages React's context feature to make it really simple to render fields and error messages
* [redux-form](https://github.com/erikras/redux-form) - manages form state for you, leaving you do the rendering exactly as you wish
## Getting newforms
### Node.js
Newforms can be used on the server, or bundled for the client using an
npm-compatible packaging system such as [Browserify](http://browserify.org/) or
[webpack](http://webpack.github.io/).```
npm install newforms
``````javascript
var forms = require('newforms')
```By default, newforms will be in development mode. To use it in production mode,
set the environment variable `NODE_ENV` to `'production'` when bundling. To
completely remove all development mode code, use a minifier that performs
dead-code elimination, such as [UglifyJS](https://github.com/mishoo/UglifyJS2).### Browser bundle
The browser bundle exposes a global `forms` variable and expects to
find global `React` variable to work with.The uncompressed bundle is in development mode, so will log warnings about
potential mistakes.You can find it in the [/dist directory](https://github.com/insin/newforms/tree/v0.13.2/dist).
## [Upgrade Guide](https://github.com/insin/newforms/blob/react/UPGRADE_GUIDE.md#0130)
## [Documentation @ ReadTheDocs](http://newforms.readthedocs.org/en/v0.13.2/)
## [Newforms Examples @ GitHub](https://github.com/insin/newforms-examples)
## Related Projects
* [newforms-bootstrap](https://github.com/insin/newforms-bootstrap) - Bootstrap 3
integration & grid form form layout components.* [newforms-gridforms](https://github.com/insin/newforms-gridforms) -
[Grid Forms](http://kumailht.com/gridforms/) form layout components.## Quick Guide
A quick introduction to defining and using newforms Form objects.
### Design your Form
The starting point for defining your own forms is `Form.extend()`.
Here's a simple (but incomplete!) definition of a type of Form you've probably
seen dozens of times:```javascript
var SignupForm = forms.Form.extend({
username: forms.CharField(),
email: forms.EmailField(),
password: forms.CharField({widget: forms.PasswordInput}),
confirmPassword: forms.CharField({widget: forms.PasswordInput}),
acceptTerms: forms.BooleanField({required: true})
})
```A piece of user input data is represented by a `Field`, groups
of related Fields are held in a `Form` and a form input which will
be displayed to the user is represented by a `Widget`. Every
Field has a default Widget, which can be overridden.### Rendering a Form
Forms provide helpers for rendering labels, user inputs and validation errors
for their fields. To get you started quickly, newforms provides a React
component which use these helpers to render a basic form structure.At the very least, you must wrap rendered form contents in a ``,
provide form controls such as a submit button and hook up handling of form
submission:```javascript
var Signup = React.createClass({
render: function() {
return
Sign Up
},// ...
```Rendering helpers attach event handlers to the inputs they render, so getting
user input data is handled for you.The `RenderForm` component handles creating a form instance for you, and
setting up automatic validation of user input as it's given.To access this form instance later, make sure the component has a `ref` name.
### Handling form submission
The final step in using a Form is validating when the user attempts to submit.
First, use the `ref` name you defined earlier to get the form instance via the
`RenderForm` component's `getForm()` method.Then call the form's `validate()` method to ensure every field in the form is
validated against its current user input.If a Form is valid, it will have a `cleanedData` object containing validated
data, coerced to the appropriate JavaScript data type when appropriate:```javascript
propTypes: {
onSignup: React.PropTypes.func.isRequired
},_onSubmit: function(e) {
e.preventDefault()var form = this.refs.signupForm.getForm()
var isValid = form.validate()
if (isValid) {
this.props.onSignup(form.cleanedData)
}
}
})
```### Implementing custom validation
There's an obvious validation not being handled by our form: what if the
passwords don't match?This is a cross-field validation. To implement custom, cross-field validation
add a `clean()` method to the Form definition:```javascript
clean: function() {
if (this.cleanedData.password &&
this.cleanedData.confirmPassword &&
this.cleanedData.password != this.cleanedData.confirmPassword) {
throw forms.ValidationError('Passwords do not match.')
}
}
```### [Live Quickstart Demo](http://newforms.readthedocs.org/en/latest/quickstart.html#live-demo)
## MIT Licensed