npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-api-hoc

v0.3.0

Published

This higher order component provides you with functions as props to make api calls and lets you know the status of you api call based on which you can change the rendering of your component.

Downloads

10

Readme

React-API-HOC

It eases out the amount of effort that the developer has to put in for integrating his/her component with an service API. Normally an API request in React or React Native is made using a thunk action which will internally dispatch multiple actions - to get to know the LOADING, LOADED and LOADERROR status of that request. But using this HOC, you will be freed from doing all these tasks. Just pass the API endpoints and whatever necessary to make a request, and this higher order component will internally take care of everything required to provide the LOADING status to show something on the screen until the request loads, and also internally manages the storage of the data which will be done in the redux under apiData state if it is a redux integrated application, otherwise in case of a non-redux application, it provides you the data as a prop.

##Installation

Since the library is a JS-based solution, to install the latest version of react-navigation you only need to run:

yarn add react-api-hoc

or

npm install --save react-api-hoc

##Documentation

First requirement is to include a reducer at the top most level in the root reducer of your application. Pass the action type which you will be dispatching in your application to clear the entire redux state while exiting the application. Make sure this is at the top most level only.

import { combineReducers } from 'redux';
import { getReducer } from 'react-api-hoc';

export default combineReducers({
  apiData: getReducer('EXIT_APP');
  ...otherReducers,
});

The next step includes exposing the redux store for which you will have to do the following and take the modified store as the return value and in the provider provide that as the store.

import { createStore } from 'redux';
import { Provider } from 'react-redux';
import { enhanceStore } from 'react-api-hoc';
import RootComponent from './src';
import RootReducer from './reducers';

const store = enhanceStore(createStore(RootReducer));

const App = () => (
  <Provider store={store}>
  </Provider>
);

That's it. Now you are all set to wrap your component with the withAPIRequest HOC to avail the functionalities.

import React from 'react';
import { Button } from 'react-native';
import { withAPIRequest } from 'react-api-hoc';

// The data corresponding to these requests can be found in
// this.props.apiData.UNIQUE_ID1 and this.props.apiData.UNIQUE_ID2 respectively.
class Sample extends React.Component {
  componentDidUpdate(prevProps) {
    if (prevProps.loading !== true && this.props.loading === true) {
      // render loading content
    }
  }

  onClick = () => {
    this.props.apiRequest({
      'UNIQUE_ID1': {
        url: '',
        headers: '',
        ...
      },
      'UNIQUE_ID2': {
        url: '',
        headers: '',
        ...
      },
    });
  }

  render() {
    return (
      <Button
        onPress={this.onClick}
        title="Make an API Request."
      />
    );
  }
}

const mapStateToProps = state => ({
  apiData: state.apiData,
});

export default connect(mapStateToProps)(withAPIRequest(Sample));

If you don't want the data to be stored in the redux state i.e. when the application is not connected to redux, then the first 2 steps do not need to be performed.

import React from 'react';
import { Button } from 'react-native';
import { withAPIRequest } from 'react-api-hoc';

// The data corresponding to these requests can be found in
// this.props.apiData.UNIQUE_ID1 and this.props.apiData.UNIQUE_ID2 respectively.
class Sample extends React.Component {
  componentDidUpdate(prevProps) {
    if (prevProps.loading !== true && this.props.loading === true) {
      // render loading content
    }
  }

  onClick = () => {
    this.props.apiRequest({
      'UNIQUE_ID1': {
        url: '',
        headers: '',
        ...
      },
      'UNIQUE_ID2': {
        url: '',
        headers: '',
        ...
      },
    });
  }

  render() {
    return (
      <Button
        onPress={this.onClick}
        title="Make an API Request."
      />
    );
  }
}

export default withAPIRequest(Sample);