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

lazy_suspense_retry

v0.2.1

Published

A utility library to help with lazy load

Downloads

1,157

Readme

Lazy-Load React Component Package Documentation

Overview

This package is designed to help lazy-load React components, providing features such as loading components, retry attempts, and error components when all retry attempts have been exhausted. By using this package, you can significantly improve the performance and user experience of your application by loading components only when needed.

Installation

To install the package, run the following command:

npm install lazy_suspense_retry

or

yarn add react-lazyload-component

Usage

First, import the package in your project:

import { lazySuspenseRetry as LSR } from "lazy_suspense_retry"

Then wrap and import your component. Below is example with react-router

const Home = LSR(() => import("home/home"))
const PostPage = LSR(() => import("posts/postpage"))
const EventsPage = LSR(() => import("events/Events"))
const ErrPage = LSR(() => import("errpage"))

const App = () => {
    return useRoutes([
		{ path: "", element: <Home /> },
		{ path: "post/:postId", element: <PostPage /> },
		{ path: "events/:eventId", element: <EventsPage /> },
		{ path: "*", element: <ErrPage /> },
	])
}

Configuration

Loading Component

To display a custom loading component while the target component is being loaded, pass the loader prop:

Global Option applicable to all component

LSR.defaultOption = {
	loader: (
		<div className={"circular-loader"}>
			<CircularProgress size={24} thickness={2} />
		</div>
	),
}

Individual option only affect Home Component

const Home = LSR(() => import("home/home"), {
    loader: (
		<div className={"circular-loader"}>
			<CircularProgress size={24} thickness={2} />
		</div>
	)
})

Retry Attempt

To set the number of retry attempts before displaying an error component, use the maxRetryAttempt prop, and set the interval of each attempt:

Global Option applicable to all component

LSR.defaultOption = {
	maxRetryAttempt: 5, // will stop after 5 retry attempt
    interval: 1000, // 1 sec interval of each retry 
}

Individual Option only affect Home Component

const Home = LSR(() => import("home/home"), {
    maxRetryAttempt: 5, // will stop after 5 retry attempt
    interval: 1000, // 1 sec interval of each retry 
})

Error Component

To display a custom error component when all retry attempts have been exhausted. Pass a Component that accepts props with { error: Error, detail: string } :

// global option
LSR.defaultOption = {
	crashPlaceholder: FallbackComponent
}

// individual option
const Home = LSR(() => import("home/home"), {
    crashPlaceholder: FallbackComponent
})


const FallbackComponent: React.FC<{
	error?: Error
	details?: string | undefined
}> = ({ error, details }) => {
	return (
        <div>
            <ErrorMessage error={error || new Error("unknown error")} />
            <pre>{details}</pre>
            <Button $colorVariant={Variant.ERROR} onClick={() => window.location.reload()}>
                Error Please Reload
            </Button>
        </div>
	)
}

Advanced Usage

You can combine all configurations for a complete implementation:

import { lazySuspenseRetry as LSR } from "lazy_suspense_retry"

Then wrap and import your component. Below is example with react-router

const Home = LSR(() => import("home/home"))
const PostPage = LSR(() => import("posts/postpage"))
const EventsPage = LSR(() => import("events/Events"))
const ErrPage = LSR(() => import("errpage"))


LSR.defaultOption = {
	loader: (
		<div className={"circular-loader"}>
			<CircularProgress size={24} thickness={2} />
		</div>
	),
	maxRetryAttempt: 10,
	interval: 1000,
	crashPlaceholder: FallbackComponent,
}

export const App = () => {
    return useRoutes([
		{ path: "", element: <Home /> },
		{ path: "post/:postId", element: <PostPage /> },
		{ path: "events/:eventId", element: <EventsPage /> },
		{ path: "*", element: <ErrPage /> },
	])
}


const FallbackComponent: React.FC<{
	error?: Error
	details?: string | undefined
}> = ({ error, details }) => {
	return (
        <div>
            <ErrorMessage error={error || new Error("unknown error")} />
            <pre>{details}</pre>
            <Button $colorVariant={Variant.ERROR} onClick={() => window.location.reload()}>
                Error Please Reload
            </Button>
        </div>
	)
}

API

Props

  • loader?: React.ReactNode (optional): The Component to be displayed while the target component is loaded

  • maxRetryAttempt: number (required): The maximum number of retry attempts before showing the error component. Default: 10, 0 means no retries.

    interval: number // interval in ms between retryAttempt crashPlaceholder: React.FC<{ error?: Error; details?: string }>