Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

react-custom-hooks-utils

babarbilal5615MIT1.4.1

This library contains a collection of reusable React custom hooks to simplify state management, side effects, and user interactions.

react, react hooks, custom hooks, useFetch, useLocalStorage, useToggle, useDebounce, useWindowSize, usePrevious, useClickOutside, useHover, useTimeout, useForm, Each, custom react hooks

readme

main image

React Custom Hooks

This library contains a collection of reusable React custom hooks to simplify state management, side effects, and user interactions.

Installation

To use these hooks in your React project, install the react-custom-hooks-utils package via npm or yarn:

Using npm

npm install react-custom-hooks-utils

Using yarn

yarn add react-custom-hooks-utils

Usage

Once installed, you can import and use the hooks in your React components. Below is a detailed explanation of how to use each hook:

1. Fetch Data from an API (useFetch)

import { useFetch } from 'react-custom-hooks-utils';

const { data, loading, error } = useFetch('https://api.example.com/data');
  • data: Stores the API response.
  • loading: Boolean indicating if the request is in progress.
  • error: Captures any error that occurs during the fetch.

2. Persist State in Local Storage (useLocalStorage)

import { useLocalStorage } from 'react-custom-hooks-utils';

const [name, setName] = useLocalStorage('name', 'John Doe');
  • Retrieves and stores values in localStorage.
  • Automatically updates when values change.

3. Toggle Boolean State (useToggle)

import { useToggle } from 'react-custom-hooks-utils';

const [isVisible, toggleVisibility] = useToggle(false);
  • Allows toggling between true and false states.

4. Debounce a Value (useDebounce)

import { useDebounce } from 'react-custom-hooks-utils';

const debouncedSearchTerm = useDebounce(searchTerm, 500);
  • Delays updating the state until after a specified time (500ms).
  • Useful for optimizing API requests when users type in a search bar.

5. Get Window Dimensions (useWindowSize)

import { useWindowSize } from 'react-custom-hooks-utils';

const { width, height } = useWindowSize();
  • Provides real-time updates of the window size (width and height).

6. Get Previous State (usePrevious)

import { usePrevious } from 'react-custom-hooks-utils';

const previousCount = usePrevious(count);
  • Stores the previous state value.
  • Useful for tracking state changes over time.

7. Detect Clicks Outside an Element (useClickOutside)

import { useClickOutside } from 'react-custom-hooks-utils';
import { useRef } from 'react';

const ref = useRef();
useClickOutside(ref, () => console.log('Clicked outside!'));
  • Detects clicks outside a referenced element.
  • Useful for closing dropdowns, modals, or sidebars when clicking outside.

8. Detect Hover State (useHover)

import { useHover } from 'react-custom-hooks-utils';

const [hoverRef, isHovered] = useHover();
  • hoverRef: Attach this to an element.
  • isHovered: Boolean indicating if the element is being hovered.

9. Execute Code After Delay (useTimeout)

import { useTimeout } from 'react-custom-hooks-utils';

useTimeout(() => console.log('Timeout!'), 1000);
  • Runs a callback function after a specified delay (1000ms).

10. Render Lists Easily (Each)

import { Each } from 'react-custom-hooks-utils';

const data = ['Item 1', 'Item 2', 'Item 3'];

<Each of={data} render={(item, index) => <p key={index}>{item}</p>} />
  • Simplifies rendering lists.
  • Ensures correct key assignment and child element handling.

11. Manage Form State (useForm)

import { useForm } from 'react-custom-hooks-utils';

const { values, errors, handleChange, handleSubmit } = useForm(
  { email: '', password: '' },
  (values) => {
    const errors = {};
    if (!values.email) errors.email = 'Email is required';
    if (!values.password) errors.password = 'Password is required';
    return errors;
  }
);
  • values: Stores form field values.
  • errors: Stores validation errors.
  • handleChange: Updates state on input change.
  • handleSubmit: Validates and submits form data.

12. Access and Track Geolocation (useGeoLocation)

import { useGeoLocation } from 'react-custom-hooks-utils';

const LocationComponent = () => {
  // Call the hook with options (optional) and watch set to true
  const { loading, coordinates, error, isWatching } = useGeoLocation(
    { enableHighAccuracy: true, timeout: 5000 }, // Optional options
    true // Set to true if you want to watch for location changes
  );

  if (loading) {
    return <div>Loading location...</div>;
  }

  if (error) {
    return <div>Error: {error.message}</div>;
  }

  return (
    <div>
      <h3>Geolocation</h3>
      <p>Latitude: {coordinates?.latitude}</p>
      <p>Longitude: {coordinates?.longitude}</p>
      <p>Watching: {isWatching ? 'Yes' : 'No'}</p>
    </div>
  );
};
  • loading: Whether the location is still being fetched.
  • coordinates: The current coordinates (if available).
  • error: An error object if the location request fails.
  • isWatching: Whether the hook is currently watching for location changes.

13. Update Document Title (useDocumentTitle)

import {useDocumentTitle} from 'react-custom-hooks-utils';

const PageComponent = () => {
  useDocumentTitle('My Page Title', true); // Set the title and revert on unmount

  return <div>Content of the page</div>;
};
  • title: The title you want to set for the document.
  • revertOnUnmount: If true, the document title will revert to its previous value when the component unmounts.

14. useCookie

Description:

A hook to manage browser cookies with React state.

Usage:

import { useCookie } from 'react-custom-hooks-utils';

const [cookie, setCookie] = useCookie('theme', 'light');

Parameters:

  • key (string) – The name of the cookie.
  • initialValue (any) – The default value if the cookie is not set.

Returns:

  • cookie – The current cookie value.
  • setCookie(value, daysToExpire) – Function to update the cookie value and set an expiration.

15. useDarkMode

Description:

A hook to manage dark mode preferences using localStorage and system settings.

Usage:


import { useDarkMode } from 'react-custom-hooks-utils';

const [isDarkMode, toggleDarkMode] = useDarkMode();

Returns:

  • isDarkMode – Boolean indicating if dark mode is enabled.
  • toggleDarkMode – Function to toggle dark mode.

16. useInterval

Description:

A hook to run a function at a set interval.

Usage:

import { useInterval } from 'react-custom-hooks-utils';

useInterval(() => {
  console.log('This runs every second');
}, 1000);

Parameters:

  • callback – Function to execute.
  • delay – Interval duration in milliseconds.

17. useKeyPress

Description:

A hook to detect if a specific key is being pressed.

Usage:

import { useKeyPress } from 'react-custom-hooks-utils';

const isEnterPressed = useKeyPress('Enter');

Parameters:

  • targetKey (string) – The key to listen for.

Returns:

  • keyPressed – Boolean indicating if the key is pressed.

18. useMediaQuery

Description:

A hook to check if the current screen size matches a given media query.

Usage:

import { useMediaQuery } from 'react-custom-hooks-utils';

const isMobile = useMediaQuery('(max-width: 768px)');

Parameters:

  • query (string) – CSS media query string.

Returns:

  • matches – Boolean indicating if the query matches.

19. useThrottle

Description:

A hook to throttle a function call, ensuring it executes at most once within a given time frame.

Usage:

import { useThrottle } from 'react-custom-hooks-utils';

const throttledFunction = useThrottle(() => console.log('Throttled'), 2000);

Parameters:

  • callback – Function to be throttled.
  • delay – Time in milliseconds to wait before the function can be executed again.

Returns:

  • A throttled version of the callback function.

License

This project is open-source and available under the MIT License.