> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.generaltranslation.app/llms.txt
> Use this file to discover all available pages before exploring further.

# useMfaPolling

<ParamField body="useMfaPolling(options?)" type={<span><a href="/docs/libraries/acul/react-sdk/API-Reference/Types/interfaces/MfaPollingResult">MfaPollingResult</a></span>}>
  Auth0 Advanced Customization of Universal Login (ACUL) の画面で、
  MFA（多要素認証）のプッシュ通知ポーリング（プッシュ通知での承認待ちなど）を管理するための React フックです。

  このフックは長時間動作するポーリングループをセットアップして制御し、次のいずれかが発生するまで
  MFA プッシュチャレンジのエンドポイントを繰り返しチェックします。

  * チャレンジがユーザーによって**承認または拒否**されると、`options.onCompleted` が呼び出されます。
  * **エラー**（ネットワークエラー、200/429 以外のレスポンス）が発生すると、`options.onError` が呼び出されます。
  * **コンポーネントがアンマウント**されるか `stopPolling()` が呼び出されると、ポーリングがキャンセルされます。

  ### 主な機能

  * `isRunning` は**リアクティブ**に変化します — ポーリングループが内部的に停止した場合やキャンセルされた場合、自動的に更新されます。
  * React の再レンダー中に重複したネットワーク呼び出しや意図しない再起動を防ぐために、
    **安定した単一のポーリングインスタンス**（`useRef`）を使用します。
  * アンマウント時に**自動的にクリーンアップ**されます：孤立したタイマーやリークした XHR リクエストは発生しません。

  ## パラメータ

  <ParamField body="options?" type={<span><a href='/docs/libraries/acul/react-sdk/API-Reference/Types/type-aliases/MfaPollingOptions'>MfaPollingOptions</a></span>}>
    ポーリング間隔、成功時のコールバック関数（`onCompleted`）、および任意のエラーハンドラー（`onError`）を指定する [MfaPollingOptions](/docs/ja-JP/libraries/acul/react-sdk/API-Reference/Types/type-aliases/MfaPollingOptions)。
  </ParamField>

  ## 戻り値

  [`MfaPollingResult`](/docs/ja-JP/libraries/acul/react-sdk/API-Reference/Types/interfaces/MfaPollingResult)

  次の内容を含む [MfaPollingResult](/docs/ja-JP/libraries/acul/react-sdk/API-Reference/Types/interfaces/MfaPollingResult) オブジェクト:

  * `isRunning` — ポーリングがアクティブな間は `true`。
  * `startPolling()` — ポーリングを開始または再開します。
  * `stopPolling()` — 直ちにポーリングを停止します。

  ## 対応している画面

  * `mfa-push-challenge-push`
  * `reset-password-mfa-push-challenge-push`
  * `mfa-push-enrollment-qr`

  ```tsx Example theme={null}
  import { useMfaPolling } from '@auth0/auth0-acul-react/mfa-push-challenge-push';

  export function MfaPushStatus() {
    const { isRunning, startPolling, stopPolling } = useMfaPolling({
      intervalMs: 5000,
      onCompleted: () => console.log('Push approved!/denied'),
      onError: (error) => console.error('Polling error:', error)
    });

    return (
      <div>
        <button onClick={startPolling} disabled={isRunning}>
          {isRunning ? 'Waiting for approval…' : 'Start MFA Polling'}
        </button>
        {isRunning && <button onClick={stopPolling}>Cancel</button>}
      </div>
    );
  }
  ```

  ## 備考

  * `onError` コールバックは、サーバーレスポンスを説明する `status` と `responseText` を含む [ULError](/docs/ja-JP/libraries/acul/react-sdk/API-Reference/Types/interfaces/Error) オブジェクトを受け取ります。
  * 内部のレート制限レスポンス（`429`）は自動的に処理されます。
    ポーリングはリセットウィンドウまで待機してから再試行します。
  * 実行中に `startPolling()` を繰り返し呼び出しても安全であり、その動作は冪等です。
</ParamField>
