react-custom-hooks-utils v1.4.1
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-utilsUsing yarn
yarn add react-custom-hooks-utilsUsage
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
trueandfalsestates.
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 (
widthandheight).
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.