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 🙏

© 2025 – Pkg Stats / Ryan Hefner

use-fetch-swr

v0.0.4

Published

A wrapper for SWR with extra features like token management, query handling, and message status control

Readme

use-fetch-swr

use-fetch-swr is an SWR wrapper that simplifies HTTP request management in React, adding extra features like token handling, message control, and query management.

Features

  • 🔒 Automatic token authentication handling
  • 🔄 Loading and validation state control
  • 💬 Customizable message system
  • 🔍 URL query management
  • 🎯 Full TypeScript support
  • ⚡ Based on SWR for efficient revalidation

Installation

npm install use-fetch-swr
# or
yarn add use-fetch-swr

Basic Usage

import useFetchSWR from 'use-fetch-swr'

function MyComponent() {
  const { data, error, isLoading, message, isValidating, mutation } = useFetchSWR(
    'https://api.example.com/data', 
    {
      token: 'your-auth-token',          // Optional: Auth token
      queries: { page: 1, limit: 10 },   // Optional: URL queries
      messageURL: 'Invalid URL',         // Optional: Custom URL message
      messageError: 'Failed to load',    // Optional: Error message
      config: {                          // Optional: SWR config
        revalidateOnFocus: false
      }
    }
  );

  if (isLoading) return <div>{message}</div>;  // Shows "Loading" by default
  if (error) return <div>{message}</div>;      // Shows error message
  return <div>{/* Render data */}</div>;
}

Message System

The hook handles messages automatically following this priority:

  1. Server Message (Highest priority)
// If API responds with:
{ message: "Unauthorized user", status: false }
// Message will be: "Unauthorized user"
  1. Error Messages (If an error occurs)
    • Error message priority:
      1. Server error message (if exists)
      2. Request error message (error.message)
      3. Custom message (configured messageError)
// Error cascade example
const { message } = useFetchSWR('/api/users', {
  messageError: 'Custom error' // lowest priority
}); 

// If server error exists: shows server message
// If error.message exists: shows error.message
// If none exists: shows "Custom error"
// If messageError not configured: shows "Error in the request"
  1. Loading State
// During loading
// Message: "Loading" (default)
  1. Success
// Successful operation
// Message: "Ok" (default)

Complete API

Parameters

useFetchSWR<Data>(
  url: string,           // Required: Request URL
  params?: {            // Optional: Configuration
    token?: string;     // Bearer token
    config?: SWRConfiguration;
    queries?: Queries;  // URL parameters
    messageURL?: string;
    messageError?: string;
  }
)

Return

{
  data: Data | null;
  error: boolean;
  message: string;
  isLoading: boolean;
  isValidating?: boolean;
  mutation?: () => Promise<any>;
}

Usage Examples

URL Queries

const { data } = useFetchSWR('/api/users', {
  queries: { page: 1, search: 'john' }
});
// Result: /api/users?page=1&search=john

TypeScript

interface User { id: number; name: string; }
const { data } = useFetchSWR<User[]>('/api/users');
// data will be User[] | null

SWR Configuration

All SWR configuration options are available through the config parameter:

const { data } = useFetchSWR('/api/data', {
  config: {
    revalidateOnFocus: false,
    refreshInterval: 3000
  }
});

License

MIT © [Ricardo8Abreu]