3.0.2 • Published 7 years ago
react-functional v3.0.2
react-functional
Add life cycle methods to stateless functional components, without the class noise.
Supported Version
React 16 (use v2.0.0 for older versions)
npm i --save react-functionalfunctional(component)
Pass life cycle methods as an options object
import { React } from 'react'
import functional from 'react-functional'
function ComponentA(props) {
return <div>{ props.name }</div>
}
const options = {
shouldComponentUpdate: (props, nextProps) =>
props.name !== nextProps.name
}
export default functional(ComponentA, options)Add life cycle methods to function component
import { React } from 'react'
import functional from 'react-functional'
function ComponentA(props) {
return <div>{ props.name }</div>
}
ComponentA.shouldComponentUpdate = (props, nextProps) =>
props.name !== nextProps.name
export default functional(ComponentA)Compose component from an object
import { React } from 'react'
import functional from 'react-functional'
function shouldComponentUpdate(props, nextProps) {
return props.name !== nextProps.name
}
function render(props) {
return <div>{ props.name }</div>
}
export default functional({shouldComponentUpdate, render})Access Component Instance
Since this isn't a class, using this to lookup a component
instance is undesirable (and probably bug-prone). So react-functional
passes the component instance as the last argument of the render method
and all life cycle methods
import { React } from 'react'
import functional from 'react-functional'
function ComponentA(props, cmp) {
return <input ref='name' onClick={()=>console.log(cmp.refs.name.value)}/>
}
const options = {
componentWillReceiveProps: (nextProps, cmp) =>
cmp.refs.name.value = nextProps.name
}
export default functional(ComponentA, options)Supported properties
propTypesdefaultPropsdisplayName(auto-detected from function names)
Supported methods
componentWillMount(props)componentDidMount(props, refs)componentWillReceiveProps(props, nextProps, refs)shouldComponentUpdate(props, nextProps, refs)componentWillUpdate(props, nextProps, refs)componentDidUpdate(props, prevProps, refs)componentWillUnmount(props, refs)
Test Coverage
npm run cov| File | % Stmts | % Branch | % Funcs | % Lines |
|---|---|---|---|---|
| All files | 100 | 100 | 100 | 100 |
npm testtest/index.js
function component
✓ componentWillMount called
✓ render function called
✓ div element rendered
✓ prop passed through
✓ instance passed through render
✓ instance passed through lifecycle methods
function w/ options object
✓ componentWillMount called
✓ render function called
✓ div element rendered
✓ prop passed through
✓ instance passed through render
✓ instance passed through lifecycle methods
object component
✓ componentWillMount called
✓ render function called
✓ div element rendered
✓ prop passed through
✓ instance passed through render
✓ instance passed through lifecycle methodsThanks
- react-stateless for inspiration and code
- nearForm for sponsoring