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-loadit

v1.0.0

Published

A tiny, happy lazy loader for React.

Downloads

10

Readme

React LoadIt

Simple, tiny React component lazy-loader. Splits your React app at defined points at the component-level, so there's no unnecessary code delivered.

Published from a part of a private project I wrote. Thought I'd share it with you.

PS - If you're looking for a full-on, feature-rich version, I would use react-loadable.

Install

yarn add react-loadit

  • The build is CommonJS and works also with import/export using Babel.

Usage

Example of conditionally loading inside a modal.

<div>
  {this.state.clicked && (
    <Modal>
      <LoadIt {...otherProps} load={() => import('./OtherComponent')} />
    </Modal>
  )}
</div>

Webpack ideal setup

// webpack.config.js

// ...

// for dynamic imports this takes care of
// grouping loaded chunks, to load only *once*
// NOTE: Webpack 4 might negate the need for this
new CommonsChunkPlugin({
  minChunks: 2,
  children: true,
  deepChildren: true,
  async: true,
}),

// ...

Demo

Run yarn && yarn start from a directory inside ./examples.

Dependencies: You'll need to install create-react-app globally.

API

load

func|arr, required

  • Default export: () => import(...)
  • Named (single) export: [() => import('./Exported'), 'SomeExport']
    • @todo - multiple named exports?

A component to dynamically load.

Default export

<LoadIt load={() => import('./LoadMe')} />

Named export

<LoadIt load={[ () => import('./LoadMe'), 'LoadThisExport' ]} />

loadingComponent

func: (obj) => element

const renderLoading = ({ loadError, loadTimeout, pastDelay }) => {
  if (loadError) {
    return <div>Load error</div>;
  } else if (pastDelay && !loadTimeout) {
    return <LoadingSkeleton />;
  } else if (loadTimeout) {
    return <div>Taking awhile...</div>;
  }
  return null;
};

Return an optional component to show while loading. Passes an object to be used to create a more complex loading component (e.g. load fails).

  • loadError (bool) - true if load failed.
  • loadTimeout (bool) - true if timeout prop is set and timeout length has past.
  • pastDelay (bool) - true if delay is set and delay time has past.

delay

int

<LoadIt delay={200} loadingComponent={...} ... />

Good to use for components that are taking awhile (> ~200ms) to load (possibly on a slow connection, or the component is large in size). Use with loadingComponent.

The basic idea is to show nothing until this delay has past, then showing a spinner or message to the effect of "loading...". Research has shown the user will perceive the app as being faster if no spinner is shown before 200ms. Makes sense.

timeout

int

<LoadIt timeout={10000} loadingComponent={...} ... />

Good to use for components that are taking their time 🐢 to load (possibly on a slow connection, or the component is large in size). Use with loadingComponent.

shouldLoad

bool

<LoadIt shouldLoad={this.state.data.length && true} ... />

This is optional and simply an opportunity to avoid nesting the component inside if/else logic inside of render(). This will load the core <LoadIt />, but not dynamically load the desired file, or loading views, until the logic returns true.

This pattern can be helpful in a situation where you want to show a wrapping component