use-update-effect

PreviousNext

A hook to run an effect only when the component updates

Docs
hookshook

Preview

Loading preview…
registry/hooks/use-update-effect.ts
import { useEffect, useRef } from 'react'
import { useUnmount } from '@/registry/hooks/use-unmount'
import type { DependencyList, EffectCallback } from 'react'

export function useUpdateEffect(effect: EffectCallback, deps: DependencyList) {
  const mounted = useRef(false)

  // for react-refresh
  useUnmount(() => {
    mounted.current = false
  })

  useEffect(() => {
    if (!mounted.current) {
      mounted.current = true
      return
    }

    return effect()
  }, deps)
}

Installation

npx shadcn@latest add @hooks/use-update-effect

Usage

import { UseUpdateEffect } from "@/hooks/use-update-effect"
const value = UseUpdateEffect()