New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

hoist-react-instance-methods

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hoist-react-instance-methods

Copies specific methods from a child instance to a parent instance

latest
Source
npmnpm
Version
2.0.0
Version published
Maintainers
1
Created
Source

hoist-react-instance-methods

Build Status

Copies specific methods from a child instance to a parent instance. Can be useful in Higher Order Components.

Motivations

It's recommented to use Higher Order Components (HOC) over mixins and over context

https://medium.com/@dan_abramov/mixins-are-dead-long-live-higher-order-components-94a0d2f9e750 https://facebook.github.io/react/blog/2016/07/13/mixins-considered-harmful.html https://twitter.com/dan_abramov/status/749715530454622208/photo/1

But sometimes HOC is burdensome

Example
// some fake HOCs
@connectRedux()
@withRouter()
@sthElse()
class MyAwesomeInput extends Component {
  focus() {
    return this.input.focus();
  }

  render() {
    return (
      <label>
        <input ref={(input) => this.input = input} />
      </label>
    );
  }
}

class App extends Component {
  componentDidMount() {

    // WTF!!! This is not an awesome Input!!!
    this.awesomeInput.getWrappedInstance().getWrappedInstance().getWrappedInstance().focus();

  }

  render() {
    return (
      <MyAwesomeInput ref={(input) => this.awesomeInput = input} />
    );
  }
}

With hoist-react-instance-methods

@hoistReactInstanceMethods(

  // get instance
  (input) => input.getWrappedInstance().getWrappedInstance().getWrappedInstance(),

  // specify method names to be copied
  ['focus']

)
@connectRedux()
@withRouter()
@sthElse()
class MyAwesomeInput extends Component {
  focus() {
    return this.input.focus();
  }

  render() {
    return (
      <div>
        <input ref={(input) => this.input = input} />
      </div>
    );
  }
}

class App extends Component {
  componentDidMount() {

    // Awesome!
    this.awesomeInput.focus();

  }

  render() {
    return (
      <MyAwesomeInput ref={(input) => this.awesomeInput = input} />
    );
  }
}

Usage

import hoistReactInstanceMethods from 'hoist-react-instance-methods';

hoistReactInstanceMethods(getInstance, methods)(TargetComponent);

// `getInstance` example:
// const getInstance = (instance) => instance.refs.app;
Arguments
  • getInstance (Function): Get the ref element. The only argument instance is the instance of TargetComponent. Should return a component instance
  • methods ([String]): Specify method names to be copied
Returns

A higher-order React component class

Installation

yarn add hoist-react-instance-methods

License

MIT

Keywords

react

FAQs

Package last updated on 01 Apr 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts