An open API service indexing awesome lists of open source software.

https://github.com/patrickmarabeas/react-stateful-hoc

Higher Order Component for demoing stateless functional React components
https://github.com/patrickmarabeas/react-stateful-hoc

reactjs reactjs-components reactjs-demo

Last synced: about 2 months ago
JSON representation

Higher Order Component for demoing stateless functional React components

Awesome Lists containing this project

README

          

# react-stateful-hoc

Higher Order Component for demoing stateless functional React components

## Demo Sandbox

[https://codesandbox.io/s/Mj5MMXG4R](https://codesandbox.io/s/Mj5MMXG4R)

## Usage

> npm i -D react-stateful-hoc

```
/** App */

import React from 'react';
import { render } from 'react-dom';
import StatefulHOC from 'react-stateful-hoc';
import { Clicker, onClickHandler, onClickHandlerAlternate } from 'Components/Clicker';

const ClickerMock = StatefulHOC(Clicker);

const ClickerDemo = ClickerMock({
onClick(prop) {
this.setState({ value: onClickHandler(this.value, prop) });
},
});

// *** or ***

const ClickerDemo2 = ClickerMock({
value: 0,
onClick(prop) {
this.setState((state, props) => ({
value: onClickHandler(state.value, prop),
}));
},
});

// *** or ***

const ClickerDemo3 = ClickerMock({
onClick(value) {
this.setState(onClickHandlerAlternate(this, value));
},
});

const App = () =>





;
render(, document.getElementById('root'));

```

```
/** components/Clicker */

import React from 'react';
import propTypes from 'prop-types';

const Clicker = (props) => {
const { value } = props; // event handlers will need to reference props directly to maintain scope
return

props.onClick(1)}>CLICK ME: {value}
;
};

Clicker.propTypes = {
value: propTypes.number.isRequired,
onClick: propTypes.func.isRequired
};

Clicker.defaultProps = {
value: 0
};

function onClickHandler(state, payload) {
return state += payload;
}

// *** or ***

function onClickHandlerAlternate(state, props) {
return {
value: state.value + props
}
}

export { Clicker, onClickHandler, onClickHandlerAlternate };
```