1 | ![React Form Header](https://github.com/tannerlinsley/react-form/raw/master/media/header.png)
|
2 |
|
3 | <img src='https://github.com/tannerlinsley/react-form/raw/master/media/logo.png' width='300'/>
|
4 |
|
5 | Hooks for managing form state and validation in React
|
6 |
|
7 | <a href="https://travis-ci.org/tannerlinsley/react-form" target="\_parent">
|
8 | <img alt="" src="https://travis-ci.org/tannerlinsley/react-form.svg?branch=master" />
|
9 | </a>
|
10 | <a href="https://npmjs.com/package/react-form" target="\_parent">
|
11 | <img alt="" src="https://img.shields.io/npm/dm/react-form.svg" />
|
12 | </a>
|
13 | <a href="https://bundlephobia.com/result?p=react-form@next" target="\_parent">
|
14 | <img alt="" src="https://badgen.net/bundlephobia/minzip/react-form@next" />
|
15 | </a>
|
16 | <a href="https://spectrum.chat/react-form">
|
17 | <img alt="Join the community on Spectrum" src="https://withspectrum.github.io/badge/badge.svg" />
|
18 | </a>
|
19 | <a href="https://github.com/tannerlinsley/react-form" target="\_parent">
|
20 | <img alt="" src="https://img.shields.io/github/stars/tannerlinsley/react-form.svg?style=social&label=Star" />
|
21 | </a>
|
22 | <a href="https://twitter.com/tannerlinsley" target="\_parent">
|
23 | <img alt="" src="https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow" />
|
24 | </a>
|
25 | <br />
|
26 | <br />
|
27 | <a href="https://patreon.com/tannerlinsley">
|
28 | <img width="180" alt="" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/become-a-patron.png" />
|
29 | </a>
|
30 |
|
31 | ## Features
|
32 |
|
33 | - Built **with** React hooks **for** React hooks
|
34 | - Highly practical validation API with 1st-class asynchronous support
|
35 | - Built-in validation debouncing with auto cancellation for stale validations
|
36 | - Field Scoping for deeply nested form values
|
37 | - No nonsense meta management for both forms and form fields
|
38 | - Fully memoized for frequent and fast rerenders
|
39 | - Flexible form API at the field, scope, and form levels
|
40 |
|
41 | # Documentation
|
42 |
|
43 | - [Installation](./docs/installation.md)
|
44 | - [Examples](./docs/examples.md)
|
45 | - [API](./docs/api.md)
|
46 | - [Validation Guide](./docs/validation.md)
|
47 | - [Field Scoping Guide](./docs/field-scoping.md)
|
48 |
|
49 | ## Sponsors
|
50 |
|
51 | **React Form** is built and maintained by me, @tannerlinsley and I am always in need of more Patreon support to keep this project afloat. If you would like to contribute to my Patreon for React Form or my other open source libraries, [visit my Patreon and help me out!](https://patreon.com/tannerlinsley)
|
52 |
|
53 | <table>
|
54 | <tbody>
|
55 | <tr>
|
56 | <td align="center" valign="middle">
|
57 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
58 | <img width='200' src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/platinum.png">
|
59 | </a>
|
60 | </td>
|
61 | <td align="center" valign="middle">
|
62 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
63 | <img width="250" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/platinum-placeholder.png">
|
64 | </a>
|
65 | </td>
|
66 | <td align="center" valign="middle">
|
67 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
68 | <img width="250" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/platinum-placeholder.png">
|
69 | </a>
|
70 | </td>
|
71 | </tr>
|
72 | </tbody>
|
73 | </table>
|
74 |
|
75 | <table>
|
76 | <tbody>
|
77 | <tr>
|
78 | <td align="center" valign="middle">
|
79 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
80 | <img width='200' src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold.png">
|
81 | </a>
|
82 | </td>
|
83 | <td align="center" valign="middle">
|
84 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
85 | <img width="150" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold-placeholder.png">
|
86 | </a>
|
87 | </td>
|
88 | <td align="center" valign="middle">
|
89 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
90 | <img width="150" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold-placeholder.png">
|
91 | </a>
|
92 | </td>
|
93 | </td>
|
94 | <td align="center" valign="middle">
|
95 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
96 | <img width="150" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/gold-placeholder.png">
|
97 | </a>
|
98 | </td>
|
99 | </tr>
|
100 | </tbody>
|
101 | </table>
|
102 |
|
103 | <table>
|
104 | <tbody>
|
105 | <tr>
|
106 | <td align="center" valign="middle">
|
107 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
108 | <img width='200' src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver.png">
|
109 | </a>
|
110 | </td>
|
111 | <td align="center" valign="middle">
|
112 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
113 | <img width="100" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png">
|
114 | </a>
|
115 | </td>
|
116 | <td align="center" valign="middle">
|
117 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
118 | <img width="100" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png">
|
119 | </a>
|
120 | </td>
|
121 | <td align="center" valign="middle">
|
122 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
123 | <img width="100" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png">
|
124 | </a>
|
125 | </td>
|
126 | <td align="center" valign="middle">
|
127 | <a href="https://patreon.com/tannerlinsley" target="_blank">
|
128 | <img width="100" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/silver-placeholder.png">
|
129 | </a>
|
130 | </td>
|
131 | </tr>
|
132 | </tbody>
|
133 | </table>
|
134 |
|
135 | <table>
|
136 | <tbody>
|
137 | <tr>
|
138 | <td valign="top">
|
139 | <a href="https://patreon.com/tannerlinsley">
|
140 | <img width='200' src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/supporters.png" />
|
141 | </a>
|
142 | </td>
|
143 | <td>
|
144 | <div><a href="https://patreon.com/tannerlinsley">Your Name and Link Here!</a></div>
|
145 | </td>
|
146 | </tr>
|
147 | </tbody>
|
148 | </table>
|
149 |
|
150 | <table>
|
151 | <tbody>
|
152 | <tr>
|
153 | <td valign="top">
|
154 | <a href="https://patreon.com/tannerlinsley">
|
155 | <img width='200' src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/fans.png" />
|
156 | </a>
|
157 | </td>
|
158 | <td>
|
159 | <div><a href="https://patreon.com/tannerlinsley">Your Name Here!</a></div>
|
160 | </td>
|
161 | </tr>
|
162 | </tbody>
|
163 | </table>
|
164 |
|
165 | <a href="https://patreon.com/tannerlinsley">
|
166 | <img width="150" alt="" src="https://raw.githubusercontent.com/tannerlinsley/files/master/images/patreon/become-a-patron.png" />
|
167 | </a>
|