diff --git a/README.md b/README.md
index e8ba202ec9..d465d25c72 100644
--- a/README.md
+++ b/README.md
@@ -73,6 +73,7 @@
- [**Side-effects**](./docs/Side-effects.md)
- [`useAsync`](./docs/useAsync.md) — resolves an `async` function.
+ - [`useAsyncCallback`](./docs/useAsyncCallback.md) — state management for async callback
- [`useAsyncRetry`](./docs/useAsyncRetry.md) — `useAsync` with `retry()` method.
- [`useCopyToClipboard`](./docs/useCopyToClipboard.md) — copies text to clipboard.
- [`useDebounce`](./docs/useDebounce.md) — debounces a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usedebounce--demo)
diff --git a/docs/useAsyncCallback.md b/docs/useAsyncCallback.md
new file mode 100644
index 0000000000..4e54eab96a
--- /dev/null
+++ b/docs/useAsyncCallback.md
@@ -0,0 +1,36 @@
+# `useAsyncCallback`
+
+React hook that returns state and a callback for an `async` function or a
+function that returns a promise. The state is of the same shape as `useAsync`.
+
+## Usage
+
+```jsx
+import {useAsyncCallback} from 'react-use';
+
+const Demo = (url) => {
+ const [state, fetch] = useAsyncCallback(async () => {
+ const response = await fetch(url);
+ const result = await response.text();
+ return result
+ }), [url];
+
+ return (
+