0.4.1 • Published 8 years ago

deku-prop-types v0.4.1

Weekly downloads
3
License
MIT
Repository
github
Last release
8 years ago

deku-prop-types

NPM version Build Status Coverage Status

Code Climate Dependencies DevDependencies

Prop type validation for Deku components

Install

npm install --save deku-prop-types

Notes

Usage

Note: propType validations are not performed in production environments

function-component.jsx

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const Counter = ({props}) => <div>{props.count}</div>
Counter.propTypes = {
  count: PropTypes.number.isRequired
}

export default validate(Counter)

object-component.jsx

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const Counter = {
  propTypes: {
    count: PropTypes.number.isRequired
  },
  render({props}) {
    return <div>{props.count}</div>
  }
}

export default validate(Counter)

Usage with deku-redux-connect

import connect from 'deku-redux-connect'
import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const Counter = ({props}) => <div>{props.count}</div>
Counter.propTypes = {
  count: PropTypes.number.isRequired
}

const mapStateToProps = ({count}) => ({count})

export default connect(
  mapStateToProps
)(validate(Counter))

Supported types

PropTypes.any

Validate prop is of any type (not undefined)

PropTypes.array

Validate prop is an array

PropTypes.arrayOf

Validate prop is an array consisting of a type

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const NamesList = ({props}) => <div>
  {props.names.map(name => <div>{name}</div>)}
</div>

NamesList.propTypes = {
  names: PropTypes.arrayOf(PropTypes.string)
}

export default validate(NamesList)

PropTypes.bool

Validate prop is a boolean

PropTypes.func

Validate prop is a function

PropTypes.instanceOf

Validate prop is an instance of a function or class

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const ItemList ({props}) => <div>
  {props.list.map(item => <div>{item}</div>)}
</div>

ItemList.propTypes = {
  list: PropTypes.instanceOf(Array)
}

export default validate(ItemList)

PropTypes.number

Validate prop is a number

PropTypes.object

Validate prop is an object

PropTypes.objectOf

Validate prop has keys all matching an allowed type

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const NameCard = ({props}) => <div>{props.person.firstName + ' ' + props.person.lastName}</div>

NameCard.propTypes = {
  person: PropTypes.objectOf(PropTypes.string)
}

export default validate(NameCard)

PropTypes.oneOf

Validate prop is one of the allowed values

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const Color = ({props}) => <div>{props.color}</div>

Color.propTypes = {
  color: PropTypes.oneOf(['red', 'green', 'blue'])
}

export default validate(Color)

PropTypes.oneOfType

Validate prop is one of the allowed types

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const Age = ({props}) => <div>{props.age}</div>

Age.propTypes = {
  age: PropTypes.oneOfType([PropTypes.number, PropTypes.number])
}

export default validate(Age)

PropTypes.shape

Validate an object's properties are of a certain type

import {element} from 'deku'
import {PropTypes, validate} from 'deku-prop-types'

const ConfigDisplay = ({props}) => <div>{props.config.port + ' ' + props.config.host}</div>

ConfigDisplay.propTypes = {
  config: PropTypes.shape({
    host: PropTypes.string,
    port: PropTypes.number
  })
}

export default validate(ConfigDisplay)

PropTypes.string

Validate prop is a string

Note: all PropTypes can be required by specifying isRequired like below:

PropTypes.number.isRequired

Custom Validators

A function may be passed instead of a propType.

import {element} from 'deku'
import {validate} from 'deku-prop-types'

const Counter = ({props}) => <div>{props.count}</div>
Counter.propTypes = {
  count(props, propName) {
    if (props[propName] < 10) {
      return new Error('count must be less than 10')
    }
  }
}

export default validate(Counter)

API

validate(component, warningLevel)

component

type: function | object

Validate props passed to component match the specified type. An Error is thrown if a prop is not valid.

warningLevel

type: number

default: 1

If a missing propType is discovered, validate will by default log a warning. This functionality may be configured.

0 - Do not warn or throw error

1 - Log a warning

2 - Throw an error

License

MIT © Dustin Specker

0.4.1

8 years ago

0.4.0

8 years ago

0.3.2

8 years ago

0.3.1

8 years ago

0.3.0

8 years ago

0.2.5

8 years ago

0.2.4

8 years ago

0.2.3

8 years ago

0.2.2

8 years ago

0.2.1

8 years ago

0.2.0

8 years ago

0.1.2

8 years ago

0.1.1

8 years ago

0.1.0

8 years ago