4.0.0 • Published 5 years ago

react-lifecycle-component v4.0.0

Weekly downloads
587
License
MIT
Repository
github
Last release
5 years ago

react-lifecycle-component

A higher order component that accepts lifecycle hook functions as props

Allows you to wrap pure functional components so that you can take advantage of lifecycle hooks without having to create a new HOC each time to wrap your component.

npm install react-lifecycle-component --save

Problem

There are many times when you've written a pure functional component but you also need to trigger some data loading on componentDidMount or similar.

There's 2 main options when this happens. Either convert your PFC to a class or create a higher-order-component that does the lifecycle work and renders your component.

This small component takes the work out of option 2.

Solution

A Redux example:

Rather than creating a new HOC and doing this:

class Wrapper extends Component {
  componentDidMount() {
    this.props.getAllTehDatas();
  }

  render() {
    return <WrappedComponent {...this.props} />;
  }
}

const mapStateToProps = () => ({
  // ...
});

const mapDispatchToProps = {
  getAllTehDatas
};

export default connect(mapStateToProps, mapDispatchToProps)(Wrapper);

Using this small utility component we can do:

const mapStateToProps = () => ({
  component: WrappedComponent
});

const mapDispatchToProps = {
  componentDidMount: getAllTehDatas
};

export default connect(mapStateToProps, mapDispatchToProps)(LifecycleComponent);

To make matters clearer, you may not want to pass your component via the component prop and may instead want to wrap your component in a function call that wraps it in a LifecycleComponent.

We provide applyLifecycle for this purpose and it can be used as: export default connect(mapStateToProps, mapDispatchToProps)(applyLifecycle(WrappedComponent))

Composed this looks like:

const composed = compose(connect(mapStateToProps, mapDispatchToProps), applyLifecycle);

export default composed(WrappedComponent);

Redux

To help make this easier we also provide a redux helper that does this composition for you. The interface is therefore the same as connect.

export default connectWithLifecycle(mapStateToProps, mapDispatchToProps)(WrappedComponent);

We only pass the props to WrappedComponent that are intended for that component. We don't pass any of the lifecycle hook props and we don't forward the component prop on.

4.0.0

5 years ago

2.0.6

5 years ago

3.0.0

7 years ago

2.0.5

7 years ago

2.0.4

7 years ago

2.0.3

7 years ago

2.0.2

7 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.1.0

8 years ago

1.0.9

8 years ago

1.0.8

8 years ago

1.0.7

8 years ago

1.0.6

8 years ago

1.0.5

8 years ago

1.0.4

8 years ago

1.0.3

8 years ago

1.0.2

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago