Options
All
  • Public
  • Public/Protected
  • All
Menu

Stable Release license TypeScript

React Good Form

Good Form implementation for React. Easy drop-in validation. Supports arrays and nested structures. Helps to reduce boilerplate without being opinionated on style. Typescript support.

Installation

npm install react-good-form

Simple Example

Good Form supports basic validations such as email, minLength, maxLength etc. out of the box. It automatically emits onChange events and provides values for fields. onSubmit callback is only triggered when submitting a valid form. Otherwise form will focus to first invalid field.

import { Form } from "react-good-form"

class EmailForm extends React.Component {
  state = {
    email: ""
  }
  render() {
    return (
      <Form
        value={this.state}
        onChange={person => {
          this.setState(person)
        }}
        onSubmit={() => {
          alert(this.state.email)
        }}
      >
        {({ Input }, { invalid, touched }) => (
          <div>
            <h1>Log in</h1>
            <div style={{ color: invalid("email") && touched("email") ? "red" : undefined }}>
              <label>Email</label>
              <Input email required for="email" />
            </div>
            <button>OK</button>
          </div>
        )}
      </Form>
    )
  }
}

Extendable

You can create arbitary rules by providing a rule function.

const rule = email => email.endsWith("hotmail.com")

<Input
  rule={rule}
  email={true}
  for="email"
/>

Or an regular expression.

const regExp = /(123456|password)/

<Input
  type="password"
  regExp={regExp}
  for="password"
/>

Supports nested structures

Provide paths to nested structures as arrays.

<div style={{ color: invalid(["address", "street"]) && touched(["address", "street"]) && "red" }}>
  <label>Street</label>
  <Input for={["address", "street"]} minLength={5} maxLength={100} />
</div>

Documentation

https://osaario.github.io/react-good-form/

Index

Type aliases

BrokenRule

BrokenRule: string | number | boolean | RegExp | FunctionRule | NumberFunctionRule

BrokenRules

BrokenRules: object & object & object

CheckboxRules

CheckboxRules: object

Type declaration

FormEventType

FormEventType: object | object | object | object | object

FormGroupAddons

FormGroupAddons: object

Type declaration

  • children: React.ReactNode
  • Optional errorForBrokenRules?: undefined | function
  • Optional leftAddon?: React.ReactNode
  • Optional rightAddon?: React.ReactNode

FunctionRule

FunctionRule: function

Type declaration

    • (value: string | null | undefined): boolean
    • Parameters

      • value: string | null | undefined

      Returns boolean

InputFormGroupProps

InputFormGroupProps: InputProps<T, A, U, S, K, I> & FormGroupAddons

InputProps

InputProps: _.Omit<React.DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & I extends "number" | "price" ? NumberInputRules : I extends "checkbox" ? CheckboxRules : StringRules & object & object

InputType

InputType: "text" | "email" | "number" | "checkbox" | "password" | "price" | undefined

LensPathType

LensPathType: LensPathType<T, A, U, S, K>

NumberFunctionRule

NumberFunctionRule: function

Type declaration

    • (value: number | null | undefined): boolean
    • Parameters

      • value: number | null | undefined

      Returns boolean

NumberInputRules

NumberInputRules: object

Type declaration

SelectFormGroupProps

SelectFormGroupProps: SelectProps<T, A, U, S, K> & FormGroupAddons

SelectProps

SelectProps: _.Omit<React.DetailedHTMLProps<InputHTMLAttributes<HTMLSelectElement>, HTMLSelectElement>, "ref"> & object

StringRules

StringRules: object

Type declaration

TextAreaFormGroupProps

TextAreaFormGroupProps: TextAreaProps<T, A, U, S, K> & FormGroupAddons

TextAreaProps

TextAreaProps: _.Omit<React.DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & StringRules & object

ValidationProps

ValidationProps: object

Type declaration

  • children: function
      • (fieldInteractionState: object): Element
      • Parameters

        • fieldInteractionState: object
          • dirty: boolean
          • invalid: BrokenRules | false
          • pristine: boolean
          • touched: boolean
          • untouched: boolean
          • valid: boolean

        Returns Element

  • for: LensPathType<T, A, U, S, K>

ValidationRuleType

ValidationRuleType: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

Variables

Const L

L: any = require('partial.lenses')

Const defaultLocale

defaultLocale: "en" = "en"

Const emailRegex

emailRegex: RegExp = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/

Const omitFromInputs

omitFromInputs: string[] = ['ref', 'for', 'leftAddon', 'rightAddon'].concat(Object.keys(formRules)).concat(Object.keys(numberRules)).concat(Object.keys(checkBoxRules))

Const wrappedFields

wrappedFields: any = L.compose(wrappedFieldsOrPrimitives,L.when(isWrappedValue))

Const wrappedFieldsOrPrimitives

wrappedFieldsOrPrimitives: any = L.lazy((rec: any) => {return L.ifElse(isObject, L.ifElse(isWrappedValue, L.optional, [L.children, rec]), L.optional)})

Const wrappedTypeName

wrappedTypeName: "oTMiaY58D7" = "oTMiaY58D7"

Functions

amountToCents

  • amountToCents(amount: string): number

Const ban

  • ban(value: undefined | null | string | number | false | true, ruleValue: string): null | string
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: string

    Returns null | string

centsToAmount

  • centsToAmount(sum: number, lang: string): string
  • Parameters

    • sum: number
    • lang: string

    Returns string

checkTypes

  • checkTypes(value: any, ruleValue: any, valueType: "string" | "boolean" | "number", ruleValueType: "string" | "boolean" | "number" | "object" | "function", ruleName: string): void
  • Parameters

    • value: any
    • ruleValue: any
    • valueType: "string" | "boolean" | "number"
    • ruleValueType: "string" | "boolean" | "number" | "object" | "function"
    • ruleName: string

    Returns void

Const email

  • email(value: undefined | null | string | number | false | true, ruleValue: boolean): null | true
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: boolean

    Returns null | true

Const equals

  • equals(value: undefined | null | string | number | false | true, ruleValue: number): null | number
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: number

    Returns null | number

fromAmount

  • fromAmount(sum: string): number

getFieldIndexesFor

  • getFieldIndexesFor(val: any): any

getIndexesFor

  • getIndexesFor(val: any): any

getValidationFromRules

  • getValidationFromRules(rules: any, value: any): BrokenRules

Const isObject

  • isObject(val: any): boolean

isWrappedValue

  • isWrappedValue(o: any): boolean

Const loosely

  • loosely(value: undefined | null | string | number | false | true, ruleValue: boolean): null | false | true
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: boolean

    Returns null | false | true

Const matches

  • matches(value: undefined | null | string | number | false | true, ruleValue: string): null | string
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: string

    Returns null | string

Const max

  • max(value: undefined | null | string | number | false | true, ruleValue: number): null | number
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: number

    Returns null | number

Const maxLength

  • maxLength(value: undefined | null | string | number | false | true, ruleValue: number): null | number
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: number

    Returns null | number

Const min

  • min(value: undefined | null | string | number | false | true, ruleValue: number): null | number
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: number

    Returns null | number

Const minLength

  • minLength(value: undefined | null | string | number | false | true, ruleValue: number): null | number
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: number

    Returns null | number

Const numberRule

  • numberRule(value: undefined | null | string | number | false | true, ruleValue: function): null | function
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: function
        • (value: number | null | undefined): boolean
        • Parameters

          • value: number | null | undefined

          Returns boolean

    Returns null | function

Const omit

  • omit(obj: any, properties: string[]): object
  • Parameters

    • obj: any
    • properties: string[]

    Returns object

Const pick

  • pick(obj: any, properties: string[]): object
  • Parameters

    • obj: any
    • properties: string[]

    Returns object

Const regExp

  • regExp(value: undefined | null | string | number | false | true, ruleValue: RegExp): null | RegExp
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: RegExp

    Returns null | RegExp

Const required

  • required(value: undefined | null | string | number | false | true, ruleValue: boolean): null | true
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: boolean

    Returns null | true

Const rule

  • rule(value: undefined | null | string | number | false | true, ruleValue: function): null | function
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: function
        • (value: string | null | undefined): boolean
        • Parameters

          • value: string | null | undefined

          Returns boolean

    Returns null | function

shallowCompare

  • shallowCompare(obj1: any, obj2: any): boolean
  • Parameters

    • obj1: any
    • obj2: any

    Returns boolean

Const strictly

  • strictly(value: undefined | null | string | number | false | true, ruleValue: boolean): null | false | true
  • Parameters

    • value: undefined | null | string | number | false | true
    • ruleValue: boolean

    Returns null | false | true

toAmount

  • toAmount(sum: number, lang: string): string
  • Parameters

    • sum: number
    • lang: string

    Returns string

Object literals

Const checkBoxRules

checkBoxRules: object

loosely

loosely: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

strictly

strictly: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

Const formRules

formRules: object

ban

ban: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

email

email: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

matches

matches: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

maxLength

maxLength: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

minLength

minLength: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

regExp

regExp: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

required

required: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

rule

rule: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

Const numberRules

numberRules: object

equals

equals: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

max

max: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

min

min: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

numberRule

numberRule: function

Type declaration

    • (value: number | string | boolean | null | undefined, ruleValue: T): BrokenRule | null
    • Parameters

      • value: number | string | boolean | null | undefined
      • ruleValue: T

      Returns BrokenRule | null

Legend

  • Module
  • Object literal
  • Variable
  • Function
  • Function with type parameter
  • Index signature
  • Type alias
  • Enumeration
  • Enumeration member
  • Property
  • Method
  • Interface
  • Interface with type parameter
  • Constructor
  • Property
  • Method
  • Index signature
  • Class
  • Class with type parameter
  • Constructor
  • Property
  • Method
  • Accessor
  • Index signature
  • Inherited constructor
  • Inherited property
  • Inherited method
  • Inherited accessor
  • Protected property
  • Protected method
  • Protected accessor
  • Private property
  • Private method
  • Private accessor
  • Static property
  • Static method

Generated using TypeDoc