elements
lifecycle
browser
- useAudio
- useBattery
- useBluetooth
- useBreakpoints
- useBroadcastChannel
- useBrowserLocation
- useClipboard
- useCopy
- useCssVar
- useDisplayMedia
- useDocumentEvent
- useDocumentTitle
- useDocumentVisibility
- useEventListener
- useEventSource
- useEyeDropper
- useFavicon
- useFileSystemAccess
- useFps
- useFullscreen
- useGamepad
- useGeolocation
- useMeasure
- useMediaControls
- useMediaQuery
- useMemory
- useNetwork
- useObjectUrl
- useOnline
- useOtpCredential
- usePermission
- usePictureInPicture
- usePointerLock
- usePostMessage
- useRaf
- useShare
- useSpeechRecognition
- useSpeechSynthesis
- useSticky
- useVibrate
- useVirtualKeyboard
- useWakeLock
- useWebSocket
utilities
state
- useBoolean
- useControllableState
- useCookie
- useCookies
- useCounter
- useDefault
- useDisclosure
- useField
- useHash
- useList
- useLocalStorage
- useMap
- useMask
- useMergedRef
- useObject
- useOffsetPagination
- useQueue
- useRafState
- useRefState
- useSessionStorage
- useSet
- useStateHistory
- useStep
- useStorage
- useToggle
- useUrlSearchParam
- useUrlSearchParams
- useWizard
user
sensors
- useDeviceMotion
- useDeviceOrientation
- useHotkeys
- useIdle
- useInfiniteScroll
- useIntersectionObserver
- useKeyboard
- useKeyPress
- useKeysPressed
- useMouse
- useMutationObserver
- useOrientation
- usePageLeave
- useParallax
- usePerformanceObserver
- useResizeObserver
- useScroll
- useScrollIntoView
- useScrollTo
- useSwipe
- useTextSelection
- useVisibility
- useWindowEvent
- useWindowFocus
- useWindowScroll
- useWindowSize
2
import { makeDestructurable } from '@siberiacancode/reactuse';
import { MinusIcon, PlusIcon } from 'lucide-react';
import { useState } from 'react';
const useCounter = (initialValue = 0) => {
const [value, setValue] = useState(initialValue);
const inc = (step = 1) => setValue((current) => current + step);
const dec = (step = 1) => setValue((current) => current - step);
return makeDestructurable({ value, inc, dec }, [value, { inc, dec }] as const);
};
const Demo = () => {
const [value, handlers] = useCounter(2);
return (
<div className='flex flex-col items-center'>
<div className='flex items-center gap-6'>
<button data-size='icon' data-variant='ghost' type='button' onClick={() => handlers.dec()}>
<MinusIcon strokeWidth={1.5} />
</button>
<span className='w-26 text-center text-7xl font-light tabular-nums'>{value}</span>
<button data-size='icon' data-variant='ghost' type='button' onClick={() => handlers.inc()}>
<PlusIcon strokeWidth={1.5} />
</button>
</div>
</div>
);
};
export default Demo;
Installation
pnpm add @siberiacancode/reactuseUsage
const result = makeDestructurable({ x: 10, y: 20 }, [10, 20] as const);API
Parameters
| Name | Type | Default | Note |
|---|---|---|---|
| obj | object | - | - Object part of the returned value |
| arr | Array | - | - Iterable tuple/array part of the returned value |
Returns
object & ArrayContributors
ddebabin
Last updated on