Skip to content

useAsyncEffect() ​

useAsyncEffect(effect, deps): void

Defined in: hooks/async/useAsyncEffect.ts:36

Run an async side effect with built-in cancellation on dependency change and unmount. The provided function receives an AbortSignal that can be used to cancel in-flight work (for example, fetch requests).

This is a small convenience wrapper on top of useEffect for "fire-and-forget" async work that should respond to dependency changes. The hook itself does not handle errors; you are expected to catch and handle them inside the provided effect callback.

On every run:

  • A new AbortController is created and its signal is passed to effect.
  • When dependencies change or the component unmounts, the previous controller is aborted, causing signal.aborted to become true.

Parameters ​

effect ​

(signal) => void | Promise<void>

The async effect function. It receives an AbortSignal that can be passed to APIs which support cancellation (such as fetch).

deps ​

DependencyList

Dependency list, same semantics as useEffect.

Returns ​

void

Example ​

tsx
useAsyncEffect(async (signal) => {
  const res = await fetch('/api/data', { signal });
  if (!res.ok) {
    throw new Error('Failed to fetch')
  };
  const json = await res.json();
  // handle json...
}, [id]);

Released under the MIT License.