1.0.1 • Published 4 months ago

react-custom-hooks-kit v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

react-custom-hooks-kit

npm version License Downloads GitHub stars GitHub forks GitHub issues GitHub pull requests Maintenance

Modern, type-safe React hooks library. Simplify your development with reusable hooks designed to enhance productivity. Explore the documentation for easy-to-use guides and examples.

Installation and Usage

Install:

npm install react-custom-hooks-kit

Table of Contents

No.Hooks
1useFetch
2useLocalStorage
3useToggle
4useForm
5useScroll
6useMediaQuery
7useMousePosition
8useWindowSize
9useClickAway
10useCountDown
11useIntersectionObserver
  1. useFetch

PARAMETERS

NameTypeDescription
urlstringThe URL from which data is to be fetched.

RETURNS

NameTypeDescription
dataT[]The response data fetched from the provided URL.
errorobjectRepresents any error encountered during data fetching.
isLoadingbooleanLoading State
isErrorbooleanIndicates whether an error occurred during the data fetching.

Example Code:

import { useFetch } from 'react-custom-hooks-kit'

const Component = () => {
  const { data, isLoading, error, isError } = useFetch(
    'https://api.example.com/data'
  )

  if (isLoading) {
    return <div>Loading...</div>
  }

  if (isError) {
    return <div>Error occurred: {error?.message}</div>
  }

  return (
    <div>
      {data.map((item, index) => (
        <p key={index}>{item}</p>
      ))}
    </div>
  )
}
  1. useLocalStorage

useLocalStorage custom React hook that facilitates storing, retrieving, and synchronizing data with the browser's localStorage API.

PARAMETERS

NameTypeDescription
keystringThe key under which the value will be stored in localStorage.
initialValueTThe initial value to be stored in localStorage.

RETURNS

NameTypeDescription
savedValueTThe current state of the value stored in local storage.
setSavedValuefunctionA function to set the state of the stored value in localStorage.

Example Code:

import { useLocalStorage } from 'react-custom-hooks-kit'

const Component = () => {
  const [savedValue, setSavedValue] = useLocalStorage('myKey', 'defaultValue')

  const handleInputChange = e => {
    setSavedValue(e.target.value)
  }

  return (
    <div>
      <input type='text' value={savedValue} onChange={handleInputChange} />
    </div>
  )
}
  1. useToggle

PARAMETERS

NameTypeDescription
initialValuebooleanDefault value set to false. Change this parameter to the desired boolean value if different from the default.

RETURNS

NameTypeDescription
isOnbooleanCurrent state
onTogglefunctionFunction to toggle between states.

Example Code:

import { useToggle } from 'react-custom-hooks-kit'

const ToggleButton = () => {
  const [isOn, toggle] = useToggle(false)

  return (
    <div>
      <button onClick={toggle}>{isOn ? 'ON' : 'OFF'}</button>
      <p>Toggle state: {isOn ? 'ON' : 'OFF'}</p>
    </div>
  )
}
  1. useForm

PARAMETERS

NameTypeDescription
initialInputValueobjectinitial state.
submitCallbackfunctionCallback function that receives the form input value for further processing or backend interaction.
inputValidatorvalidator functionCallback function to validate each input field and return an object containing validation error messages.

RETURNS

NameTypeDescription
onChangeHandlerfunctionFunction to handle input changes within the form.
onSubmitHandlerfunctionFunction to handle form submissions.
formInputsobjectObject containing form input values that correspond to their respective field names.
errorsobjectObject containing validation error messages corresponding to the fields validated through inputValidator.

Example Code:

import { useForm } from 'react-custom-hooks-kit'

const initialState = {
  email: '',
  password: ''
}

const validator = inputValue => {
  const error = {}
  if (inputValue.password && inputValue.password.length < 6) {
    error.password = 'Password should be more than 6 characters.'
  }
  // ... add other validations
  return error
}

const Form = () => {
  const sendFormData = inputValue => {
    console.log(inputValue)
    // ... process data further
  }

  const { onChangeHandler, onSubmitHandler, formInputs, errors } = useForm(
    initialState,
    sendFormData,
    validator
  )

  return (
    <form onSubmit={onSubmitHandler}>
      <input
        value={formInputs.email}
        type='email'
        name='email'
        onChange={onChangeHandler}
      />
      <input
        value={formInputs.password}
        type='password'
        name='password'
        onChange={onChangeHandler}
      />
      <button type='submit'>Submit</button>
    </form>
  )
}
  1. useScroll

RETURNS

NameTypeDescription
currentPositionnumberCurrent scroll position

Example Code:

import { useScroll } from 'react-custom-hooks-kit'

const Component = () => {
  const { currentPosition } = useScroll()

  return (
    <div style={{ width: '100vw', height: '100vh' }}>
      <h2 style={{ position: 'fixed', top: '0', left: '0' }}>
        Current Scroll: {currentPosition}
      </h2>
    </div>
  )
}
  1. useMediaQuery

PARAMETERS

NameTypeDescription
querystringA string representing the media query to be tested. Ex: 'max-width: 768px'

RETURNS

NameTypeDescription
matchesbooleanRepresents whether the current viewport matches the query.

Example Code:

import { useMediaQuery } from 'react-custom-hooks-kit'

const Component = () => {
  const isMobile = useMediaQuery('(max-width: 568px)')
  const isTablet = useMediaQuery('(min-width: 769px) and (max-width: 1024px)')
  const isDesktop = useMediaQuery('(min-width: 1025px)')

  return (
    <div>
      <p>Is Mobile? {isMobile ? 'Yes' : 'No'}</p>
      <p>Is Tablet? {isTablet ? 'Yes' : 'No'}</p>
      <p>Is Desktop? {isDesktop ? 'Yes' : 'No'}</p>
    </div>
  )
}
  1. useMousePosition

PARAMETERS

NameTypeDescription
refMutableRefObjectReference to the target HTML element.

RETURNS

NameTypeDescription
currentMousePositionMousePosition object: { x: number, y: number }Represents the current mouse coordinates (x and y positions).

Example Code:

import { useMousePosition } from 'react-custom-hooks-kit'
import { useRef } from 'react'

const Component = () => {
  const elementRef = useRef(null)
  const mouse = useMousePosition(elementRef)

  return (
    <section
      ref={elementRef}
      style={{ width: '100%', height: '400px', backgroundColor: 'lightgray' }}
    >
      <p>
        X: {mouse.x}, Y: {mouse.y}
      </p>
    </section>
  )
}
  1. useWindowSize

RETURNS

NameTypeDescription
widthnumberRepresents the current width of the browser window.
heightnumberRepresents the current height of the browser window.

Example Code:

import { useWindowSize } from 'react-custom-hooks-kit'

const WindowSizeComponent = () => {
  const { width, height } = useWindowSize()

  return (
    <div>
      <p>Window Width: {width}px</p>
      <p>Window Height: {height}px</p>
    </div>
  )
}
  1. useClickAway

PARAMETERS

NameTypeDescription
refMutableRefObjectReference to the target HTML element.
onClickAwayfunctionCallback function triggered when a click is detected outside the element.

RETURNS

NameTypeDescription
enablefunctionEnables the click-away listener.
disablefunctionDisables the click-away listener.

Example Code:

import { useClickAway } from 'react-custom-hooks-kit'

const Component = () => {
  const clickRef = useRef(null)
  const [isOpen, setIsOpen] = useState(false)

  const handleClickAway = () => {
    setIsOpen(false)
  }
  const { enable, disable } = useClickAway(clickRef, handleClickAway)

  return (
    <section ref={clickRef}>
      <button onClick={() => setIsOpen(true)}>Open Modal</button>
      {isOpen && (
        <div>
          <div>
            <button onClick={enable}>Enable</button>
            <button onClick={disable}>Disable</button>
          </div>
          <h2>Modal</h2>
        </div>
      )}
    </section>
  )
}
  1. useCountDown

PARAMETERS

NameTypeDescription
countnumberThe initial count value for the countdown.
delaynumberThe delay (in milliseconds) between count updates.

RETURNS

NameTypeDescription
currentCountnumberRepresents the current count value of the countdown.

Example Code:

import { useCountDown } from 'react-custom-hooks-kit'

const Component = () => {
  const countDown = useCountDown(10, 200) // Start countdown from 10 with a delay of 200 ms.

  return (
    <div>
      <p>Countdown: {countDown}</p>
    </div>
  )
}
  1. useIntersectionObserver

useIntersectionObserver custom Hook that determines if a component is visible on your screen. It relies on the IntersectionObserver API, which is already available in your browser. This hook comes in handy for tasks such as loading images when they come into view, creating endless scrolling on pages, or triggering animations.

PARAMETERS

NameTypeDescription
refMutableRefObjectReference to the observed HTML element.
optionsobjectIntersection Observer configuration options.
options.thresholdnumber (*default 0.3)The ratio of intersection needed to trigger the callback.
options.rootHTMLElement (*default null)The element used as the viewport for checking intersection.
options.rootMarginstring (*default "0%")Margin around the root element to adjust the intersection area.
options.stopOnceVisibleboolean (*default false)Stops observing once the element becomes visible.

RETURNS

NameTypeDescription
intersectionEntryIntersectionObserverEntry | nullRepresents the intersection details of the observed element.

Example Code:

import { useIntersectionObserver } from react-custom-hooks-kit';
import React, { useRef } from 'react';

const IntersectionComponent = () => {
  const targetRef = useRef(null);
  const intersectionEntry = useIntersectionObserver(targetRef, {
    threshold: 0.5,
    root: null,
    rootMargin: '0%',
    stopOnceVisible: true
  });

  const isVisible = intersectionEntry?.isIntersecting;

  return (
    <div>
      <div
        ref={targetRef}
        style={{
          height: '200px',
          backgroundColor: isVisible ? 'yellow' : 'gray'
        }}
      >
        {isVisible ? 'Element visible!' : 'Scroll to see me!'}
      </div>
    </div>
  );
};


const Component = () => {
  return (
    <main>
      {Array.from({ length: 5 }).map((_, index) => (
        <IntersectionComponent key={index + 1} />
      ))}
    </main>
  )
}

⬆ Back to Top