A full-featured form component.
npm install react-hero-form --save
# or
yarn add react-hero-formSimply create a FormStore and pass into Form component. value and onChange of form controls (such as input) are unnecessary.
import { Form, FormStore } from "react-hero-form";
class App extends React.Component {
constructor(props) {
super(props);
this.store = new FormStore();
}
onSubmit = e => {
e.preventDefault();
const values = this.store.get();
console.log(values);
};
render() {
return (
<Form store={this.store}>
<Form.Field label="Name" name="name">
<input type="text" />
</Form.Field>
<Form.Field label="">
<button onClick={this.onSubmit}>Submit</button>
</Form.Field>
</Form>
);
}
}Form.Item is a simplified version of Form.Field, without any extra nodes.
<Form store={this.store}>
<Form.Item name="username">
<input type="text" />
</Form.Item>
<Form.Item name="password">
<input type="password" />
</Form.Item>
</Form>will renders into:
<form>
<input type="text" />
<input type="password" />
</form>To set default values, you can pass an object as the first parameter. Use reset() to restore defaults at any time.
const store = new FormStore({ name: "Harry" });
// ...
store.reset();The second parameter is used to pass the form rules.
Using store.validate() to check entire form, and returns a tuple with error message and form values. Or directly gets form values by store.get() without validation.
function assert(condition, message) {
if (!condition) throw new Error(message)
}
const rules = {
name: (val) => assert(!!val && !!val.trim(), "Name is required")
};
const store = new FormStore({}, rules);
// ...
try {
const values = await store.validate();
console.log('values:', values);
} catch (error) {
console.log('error:', error);
}classNameForm element class name,optional.storeForm store,required.inlineInline layout for fields, default tofalse.compactHides error message, default tofalse.requiredDisplays star mark, does not include validation, default tofalse.labelWidthCustomized label width,optional.gutterCustomized distance between label and control,optional.errorClassNameAdds customized class name when field has error message,optional.onSubmitSubmit callback,optional.
classNameField element class name,optional.labelField label,optional.nameField name,optional.valuePropValue prop name of child component, default to'value'.valueGetterThe way to parse value from change event,optional.suffixSuffix nodes,optional.
classNameField element class name,optional.nameField name,optional.valuePropValue prop name of child component, default to'value'.valueGetterThe way to parse value from change event,optional.
new FormStore(defaultValues?, rules?)Creates form store.store.get()Returns entire form values.store.get(name)Returns field value by name.store.set()Sets entire form values.store.set(name, value)Sets field value by name.store.set(name, value, true)Sets field value by name and validate.store.reset()Resets form with default values.store.validate()Validates entire form and returns values.store.validate(name)Validates field value by name and returns value.store.error()Returns the all error messages.store.error(index)Returns the nth error message.store.error(name)Returns error message by name.store.error(name, message)Sets error message by name.store.subscribe(listener)Adds listener and returns unsubscribe callback.
useFormStore(defaultValues?, rules?)Creates form store with hooks.useFormChange(store, onChange)Add form listener with hooks.useFieldChange(store, onChange)Add field listener with hooks.