use-deep-compare-effect

PreviousNext

A hook to use a deep compare effect

Docs
hookshook

Preview

Loading preview…
registry/hooks/use-deep-compare-effect.ts
import { dequal } from 'dequal'
import { useRef } from 'react'
import { useIsomorphicLayoutEffect } from '@/registry/hooks/use-isomorphic-layout-effect'
import type { DependencyList, EffectCallback } from 'react'

export function useDeepCompareEffect(
  effect: EffectCallback,
  deps: DependencyList,
) {
  const ref = useRef<DependencyList>(deps)

  if (!ref.current || !dequal(ref.current, deps)) {
    ref.current = deps
  }

  useIsomorphicLayoutEffect(effect, ref.current)
}

Installation

npx shadcn@latest add @hooks/use-deep-compare-effect

Usage

import { UseDeepCompareEffect } from "@/hooks/use-deep-compare-effect"
const value = UseDeepCompareEffect()