hookmart
TypeScript icon, indicating that this package has built-in type declarations

1.1.1 • Public • Published

🦜 hookmart


code size     passing

Warning: You probably don't need this library. If you're looking for third-party React hooks, check out the ts-hooks library first!

hookmart is a collection of React hooks that have common use-cases. Each hook is lightweight and tested.

To install, run:

# npm
npm i --save hookmart
# or, with yarn
yarn add hookmart
# or, better yet, with pnpm
pnpm i hookmart

Contents:


useBoolean

Takes an optional initial boolean value and returns a boolean state variable with modifying functions setTrue, setFalse, and toggle. Returns are named.

Example usage:

import React from 'react'
import { useBoolean } from 'hookmart'

const TrueOrFalse = () => {
    const { 
        state, setTrue, setFalse, toggle 
    } = useBoolean(true)
    return (
        <>
            {state && <h1>Hi, mom! 👋</h1>}
            <button onClick={setTrue}>Show</button>
            <button onClick={setFalse}>Hide</button>
            <button onClick={toggle}>Toggle</button>
        </>
    )
}

useClipboard

Returns an array with the clipboard state variable and a copy function that writes to clipboard. Note that the state only tracks what is copied with the supplied copy function.

Example usage:

import React from 'react'
import { useClipboard } from 'hookmart'

const CopyMe = () => {
    const [ text, copyText ] = useClipboard()
    const [ input, setInput ] = React.useState('')
    
    return (
        <>
            <input 
                type='text'
                value={input}
                onChange={e => setInput(e.target.value)}
            />
            <button 
                onClick={() => {
                    copyText(input)
                    alert('Busted!')
                }}
            >
                Pssst... copy me! 📝
            </button>
        </>
    )
}

useEventListener

Attaches the supplied event trigger and callback to the supplied target. If no target is supplied, it defaults to window. Fairly standard JavaScript, but useful as it contains state checking and cleanup.

Example usage:

import React from 'react'
import { useEventListener } from 'hookmart'

const PokeyStick = () => {
    const ref = React.useRef()
    useEventListener(
        'click',
        () => alert('Ouch!'),
        ref.current
    )

    return (
        <div ref={ref}>
            Don't poke me! 👈
        </div>
    )
}

useGeolocation

Returns coordinates from the navigator.geolocation object.

Example usage:

import React from 'react'
import { useGeolocation } from 'hookmart'

const LatLong = () => {
    const coords = useGeolocation()

    return (
        <>
            <h1>I know where you live!</h1>
            <p>Latitude: {coords?.latitude}</p>
            <p>Longitude: {coords?.longitude}</p>
        </>
    )
}

useHover

Takes an input target and optional callbacks for mouseover and mouseout events, and returns a boolean of the hover state.

Example usage:

import React from 'react'
import { useHover } from 'hookmart'

const HoverHand = () => {
    const ref = React.useRef()
    const hoverState = useHover(
        ref.current,
        () => alert('Glad you arrived!'),
        () => alert('Sorry to see you go.')
    )

    return (
        <div ref={ref}>
            There's a party in here! 💃
        </div>
    )
}

useInterval

Creates a setInterval from the supplied callback and delay (in milliseconds).

Example usage:

import React from 'react'
import { useInterval } from 'hookmart'

const GrowShrink = () => {
    const [ grow, setGrow ] = React.useState(false)
    useInterval(() => setGrow(state => !state), 1000)

    return (
        <div
            style={{
                height: grow ? '500px' : '250px',
                width: grow ? '500px' : '250px',
                borderRadius: '50%',
                transition: 'height 1s, width 1s',
                backgroundColor: 'lavenderblush'
            }}
        >
            {grow ? '🖐' : '🤏'}
        </div>
    )
}

useLocalStorage

Returns an array with access to the state of a supplied localstorage key and a setter function to update it. Note that the state only tracks what is set to localstorage with the supplied setter function. Also takes an optional initial value (default null) to use if there is no item at the supplied key.

Example usage:

import React from 'react'
import { useLocalStorage } from 'hookmart'

const Theme = () => {
    const [ theme, setTheme ] = useLocalStorage('theme', 'light')

    return (
        <div className={theme}>
            <button
                disabled={theme === 'light'}
                onClick={() => setTheme('light')}
            >
                Light theme 🌻
            </button>
            <button
                disabled={theme === 'dark'}
                onClick={() => setTheme('dark')}
            >
                Dark theme 🦇
            </button>
        </div>
    )
}

useOrientation

Returns the state of the window.screen.orientation object.

Example usage:

import React from 'react'
import { useOrientation } from 'hookmart'

const Somersault = () => {
    const orientation  = useOrientation()

    if (orientation.type === ('landscape-primary' || 'landscape-secondary')) {
        return <h1>What a beautiful landscape 🦋</h1>
    } else if (orientation.type === ('portrait-primary' || 'portrait-secondary')) {
        return <h1>WORLD STAR 💯</h1>
    } else {
        return <h1>What are you using, a smart fridge?</h1>
    }
}

useParams

Pulls query parameters from an optional supplied URL string. If one isn't supplied, it uses window.location.href.

Example usage:

import React from 'react'
import { useParams } from 'hookmart'

const HowDidIGetHere = () => {
    const params = useParams()

    return (
        <>
            <h1>You passed these parameters 🦆:</h1>
            {Object.entries(params).map((item, index) => (
                <p key={index}>{item[0]} | {item[1]}</p>
            ))}
        </>
    )
}

useTimeout

Creates a setTimeout from the supplied callback and delay (in milliseconds). If no delay is provided, it defaults to 0.

Example usage:

import React from 'react'
import { useTimeout } from 'hookmart'

const ComedicTiming = () => {
    useTimeout(() => alert('He was outstanding in his field!'), 1000)

    return (
        <h1>Why did the scarecrow win an award? 🌽</h1>
    )
}

useWindowDimensions

Returns the state of the window's dimensions in width and height. Returns are named.

Example usage:

import React from 'react'
import { useWindowDimensions } from 'hookmart'

const WhichIsBigger = () => {
    const { width, height } = useWindowDimensions()

    if (width > height) {
        return <h1>CAUTION: Wide Load 🚚</h1>
    } else if (height > width) {
        return <h1>How's the weather up there? ⛅</h1>
    } else {
        return <h1>A perfect square!</h1>
    }
}

Readme

Keywords

Package Sidebar

Install

npm i hookmart

Weekly Downloads

1

Version

1.1.1

License

MIT

Unpacked Size

21.8 kB

Total Files

4

Last publish

Collaborators

  • tinkoh