内容简介:Forms in React are common source of frustration and code repetition. Enform moves that hassle out of the way.
<Enform /> helps you manage:
- form validation
- form dirty state
- form submission and reset
- field values and changes
- error messages
Forms in React are common source of frustration and code repetition. Enform moves that hassle out of the way.
So, handling form state?
Yes, in a beautiful way. Working with forms in React could be turned into straightforwad and enjoyable process. <Enform /> makes that possible "the React way" by providing intuitive access to the form state (field values/errors) together with a handy set of API methods to modify it.
Basic usage
import React from "react";
import Enform from "enform";
const App = () => (
<div>
<h1>Simple form</h1>
<Enform
initial={{ name: "" }}
validation={{ name: values => values.name === "" }}
>
{props => (
<div>
<input
className={props.errors.name ? "error" : ""}
type="text"
value={props.values.name}
onChange={e => {
props.onChange("name", e.target.value);
}}
/>
<button onClick={props.onSubmit}>Submit</button>
</div>
)}
</Enform>
</div>
);
View more intereactive examples here .
This
Install
yarn add enform
API
Component props
| Prop | Type | Required | Description |
|---|---|---|---|
| children | function | yes | Function that your need to wrap your DOM with. It accepts the props object to help with form state manipulation. |
| initial | object | yes | Initial form field values in a form of { fieldName: value, ... } . |
| validation | object | no | Validation for the fields. It takes the form of { fieldName: function, ... } where the function(values) accepts all form field values and should return either an error message or truthy/falsey value. Example: { username: values => values.username === "" ? "This field is required" : false } . |
State Api
Enform exposes its handy Api by passing an object down to the function wrapper.
<Enform initial={{ name: "" }}>
{props => (
<form />
...
</form>
)}
</Enform>
The props object contains 2 data items:
| prop | Description |
|---|---|
| values | Current field values - { fieldName: value, ... } . |
| errors | Current field errors - { fieldName: errorMessage, ... } . |
and these 7 methods:
| method | Description |
|---|---|
| onChange | Updates single field's value - onChange(fieldName, value) . The value is usually what what comes from e.target.value . Side effects: clears previously set field error. |
| onSubmit | onSubmit(successCallback) . Usually attached to a button click or directly to <form /> onSubmit. successCallback(values) will only be executed if all validations pass. Side effects: triggers validation or calls successCallback. |
| reset | Empties form elements. |
| isDirty | Reports if the form is dirty. It takes into account the initial field values passed to <Enform /> . |
| validateField | Triggers single form field validation - validateField(fieldName) . |
| clearError | Clears single form field's error - clearError(fieldName) . |
| clearErrors | Clears all errors in the form. |
props.values get updated with onChange and reset calls.
props.errors get updated with onChange , onSubmit , reset , validateField , clearError and clearErrors calls.
Documentation
Docs has its own home here . It further expands on the topics covered previously. Many examples and how to guides for variety of use cases take place on its pages too. Ref to this
Development
Run tests with jest in watch mode
yarn test
or no watch
yarn test:nowatch
Get gzip size by
yarn size
Build with
yarn build
That will pipe src/Enform.js through babel and put it as index.js under lib/ folder.
Contributing
You are welcome to open pull requests, issues with bug reports (use codesandbox ) and suggestions or simply tweet about Enform . Contact me directly if that's preferable?
Immediate and fun contrubution:help create more usable examples. Is it a full-fetured form, third party integration or a filter form with bunch of options - feel free fork the basic form in codesandbox .
Inspiration
Enform is inspired by my experience with form refactoring, @jaredpalmer 's great work on Formik and the way @kamranahmedse 's presented driver.js .
Authors
Miroslav Nikolov ( @moubi )
License
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
网站转换率优化之道
[美] Khalid Saleh、[美] Ayat Shukairy / 顾 毅 / 人民邮电出版社 / 2012-4 / 45.00元
内容简介: 怎样才能将访问者转化为顾客? 本书提供了一些切实可行的建议,比如如何说服访问者作出购买决定,如何避免用户因信息过量或导航繁琐而离开网站等。不论你是在设计或营销大型电子商务网站,还是在管理中小型在线业务,都可以从本书学会怎样使用市场营销原则、设计方法、可用性原则和分析数据来持续提升网站的转换率。 作者帮助过众多公司吸引在线顾客,有着丰富的实战经验,在书中细致讨论了从访问......一起来看看 《网站转换率优化之道》 这本书的介绍吧!