1. debounce - 基本的なデバウンス関数
  const debouncedSetCount = useCallback(
    debounce(setDebouncedCount, {
      wait: 500,
      leading: true, // 最初の呼び出しを即座に実行
    }),
    [],
  )
  • 関数の実行を遅延させる基本的なデバウンス
  • wait: 待機時間(ミリ秒)
  • leading: trueにすると最初の呼び出しを即座に実行
  • useCallbackで参照を安定化する必要がある
  1. asyncDebounce - 非同期関数用デバウンス
  const debouncedSetSearch = useCallback(
    asyncDebounce(
      async (value: string) => {
        const results = await simulateSearch(value)
        setSearchResults(results)
      },
      { wait: 500 }
    ),
    [],
  )
  • Promise/async関数用のデバウンス
  • API呼び出しなど非同期処理に最適
  • エラーハンドリングとローディング状態の管理が可能
  1. useDebouncedCallback - Hook版デバウンス
  const debouncedSetCount = useDebouncedCallback(setDebouncedCount, {
    wait: 500,
    enabled: () => instantCount > 2, // 条件付き有効化
    leading: true,
  })
 
  • useCallback不要で自動的に安定した参照を提供
  • enabled: 条件に基づいてデバウンスを有効/無効化
  1. useDebouncedState - デバウンスされた状態管理
  const [debouncedCount, setDebouncedCount, debouncer] = useDebouncedState(
    instantCount,
    { wait: 500 }
  )
 
  • 即座の値とデバウンスされた値を別々に管理
  • debouncerインスタンスで詳細な制御が可能:
    • getIsPending(): 保留中の実行があるか
    • getExecutionCount(): 実行回数
    • getOptions(): 現在のオプション
  1. useDebouncedValue - 値の監視とデバウンス

const [debouncedCount] = useDebouncedValue(instantCount, { wait: 500, enabled: instantCount > 2, })

  • 既存の状態値を監視してデバウンスされた値を返す
  • 最もシンプルで高レベルなAPI
  • 読み取り専用のデバウンス値が必要な場合に最適
  1. useAsyncDebouncer - 高度な非同期デバウンス

const setSearchAsyncDebouncer = useAsyncDebouncer(handleSearch, { wait: 500, onError: (error) { setError(error as Error) }, })

const handleSearchDebounced = setSearchAsyncDebouncer.maybeExecute

  • 非同期処理用の高度なデバウンサー
  • maybeExecute: デバウンスされた実行関数
  • getSuccessCount(): 成功した実行回数
  • エラーハンドリングとキャンセル機能内蔵

使い分けガイド

  • シンプルな値のデバウンス: useDebouncedValue
  • 状態の即座/遅延管理: useDebouncedState
  • 関数の安定したデバウンス: useDebouncedCallback
  • API呼び出し: useAsyncDebouncer
  • 手動制御が必要: 基本の debounce / asyncDebounce