react-komposer-plus

2.2.3 • Public • Published

React Komposer Plus

This is fork of React Komposer

Let's compose React containers and feed data into components. Supports both React and React Native.

Installation

npm i --save react-komposer-plus

Basic Usage

import ComponentA from 'path/to/ComponentA';
import { PropTypes } from 'react';
import {
  withHandlers,
  getContext,
  withRedux,
  withState,
  withLifecycle,
  composeAll,
} from 'react-komposer-plus';
import { useDeps } from 'mantra-plus';

const mapStateToProps = ({ layout }) => ({
  windowWidth: layout.windowWidth,
  windowHeight: layout.windowHeight,
  windowScrollTop: layout.windowScrollTop,
});

export default composeAll(
  withLifecycle({
    componentWillMount() {
      console.log('component will mount');
    },
    componentDidMount() {
      console.log('component mounted');
    },
  }),
  withHandler({
    handleClickCounter: (props, event) => {
      props.setState({
        counter: props.state + 1,
      });
    },
  }),
  withRedux(mapStateToProps),
  withState({
    counter: 1,
  }),
  getContext({
    parentCtx: PropTypes.object,
  }),
  useDeps()
)(ComponentA);

In your functional stateless ComponentA, you can now use props to do your thing! Please take note that props flow from bottom to top of composeAll.

export default const ComponentA = ({
  state,
  setState,
  windowWidth,
  windowHeight,
  windowScrollTop,
  handleClickCounter,
}, context) => {
  return (
    <div>
      <h1>current counter value: {state.counter}</h1>
      <button onClick={handleClickCounter}>Increase counter value</button>

      <h1>Window Information</h1>
      <ul>
        <li>Window Height: {windowHeight}</li>
        <li>Window Width: {windowWidth}</li>
        <li>Window ScrollTop: {windowScrollTop}</li>
      </ul>
    </div>
  );
}

Full APIs

See here

Readme

Keywords

none

Package Sidebar

Install

npm i react-komposer-plus

Weekly Downloads

1

Version

2.2.3

License

MIT

Last publish

Collaborators

  • sammkj