Kliping
KlipingBerandaDokumentasiKomponenBlocksVariasiTemplateDice UIHooks
Memulai
  • Pengenalan
  • Instalasi
  • Kredit
State
  • useBoolean
  • useControllableValue
  • useCounter
  • useDebounce
  • useResetState
  • useThrottle
  • useToggle
Lanjutan
  • useCreation
  • useCustomCompareEffect
  • useLatest
  • useLockFn
  • useMemoizedFn
  • usePrevious
Siklus Hidup
  • useDebounceEffect
  • useDebounceFn
  • useDeepCompareEffect
  • useDeepCompareLayoutEffect
  • useEffectEvent
  • useEffectWithTarget
  • useInterval
  • useIsHydrated
  • useIsomorphicLayoutEffect
  • useMount
  • useThrottleEffect
  • useThrottleFn
  • useTimeout
  • useUnmount
  • useUpdate
  • useUpdateEffect
Peramban
  • useActiveElement
  • useBattery
  • useClickAnyWhere
  • useClickAway
  • useClipboard
  • useDocumentVisibility
  • useElementSize
  • useEventListener
  • useFps
  • useFullscreen
  • useHash
  • useHover
  • useInViewport
  • useIsMatchMedia
  • useIsOnline
  • useMouse
  • useNetwork
  • useOs
  • useScrollLock
  • useTextSelection
  • useTitle
Pengembangan
  • useWhyDidYouUpdate
Paket Luar
  • useMcp
  • useQuery
  • useStickToBottom
  • useSwr
Pustaka
  • isBrowser
  • createContext
  • bacaElemen
  • saatTerpasang

useLockFn

SebelumnyaBerikutnya

Membungkus fungsi async supaya tidak bisa jalan dua kali bersamaan.

Terkirim: 0

Menekan berulang saat masih berjalan tidak menambah kiriman.

Gunanya satu dan konkret: tombol kirim yang ditekan dua kali tidak mengirim dua kali. Panggilan yang datang saat panggilan sebelumnya belum selesai diabaikan — bukan diantrikan, bukan ditunda.

Kuncinya dilepas di finally, jadi ikut terlepas juga saat fungsinya melempar. Tanpa itu satu kegagalan mengunci tombolnya selamanya, dan itu jenis cacat yang cuma muncul di hari yang buruk.

Pemasangan ​

npx shadcn-vue@latest add @kliping/use-lock-fn

Perlu @kliping terdaftar di components.json project Anda. Lihat cara menyiapkannya.

Tanpa dependensi — tidak ada berkas lain yang ikut terpasang.

Salin kode berikut ke project Anda.

ts
export function useLockFn<P extends any[] = any[], V = any>(
  fn: (...args: P) => Promise<V>,
) {
  let terkunci = false

  return async (...args: P): Promise<V | undefined> => {
    if (terkunci)
      return undefined

    terkunci = true
    try {
      return await fn(...args)
    }
    finally {
      terkunci = false
    }
  }
}

API ​

ts
export function useLockFn<P extends any[] = any[], V = any>(
  fn: (...args: P) => Promise<V>,
)
useLatestuseMemoizedFn

Di halaman ini

PemasanganAPI
Dirilis di bawah lisensi MIT. Ditulis ulang untuk Vue dari shadcn-vue, shadcn-ui-blocks, dan shadcn-hooks. Hak cipta © 2026 Kliping