diff --git a/README.md b/README.md
index 8a7bdeccfe..81d71f12a6 100644
--- a/README.md
+++ b/README.md
@@ -110,6 +110,7 @@
- [`useMount`](./docs/useMount.md) — calls `mount` callbacks.
- [`useUnmount`](./docs/useUnmount.md) — calls `unmount` callbacks.
- [`useUpdateEffect`](./docs/useUpdateEffect.md) — run an `effect` only on updates.
+ - [`useIsomorphicLayoutEffect`](./docs/useIsomorphicLayoutEffect.md) — `useLayoutEffect` that does not show warning when server-side rendering.
- [`useDeepCompareEffect`](./docs/useDeepCompareEffect.md) — run an `effect` depending on deep comparison of its dependencies
diff --git a/docs/useIsomorphicLayoutEffect.md b/docs/useIsomorphicLayoutEffect.md
new file mode 100644
index 0000000000..11620a5d02
--- /dev/null
+++ b/docs/useIsomorphicLayoutEffect.md
@@ -0,0 +1,24 @@
+# `useIsomorphicLayoutEffect`
+
+`useLayoutEffect` that does not show warning when server-side rendering, see [Alex Reardon's article](https://medium.com/@alexandereardon/uselayouteffect-and-ssr-192986cdcf7a) for more info.
+
+## Usage
+
+```jsx
+import {useIsomorphicLayoutEffect} from 'react-use';
+
+const Demo = ({value}) => {
+ useIsomorphicLayoutEffect(() => {
+ window.console.log(value)
+ }, [value]);
+
+ return null;
+};
+```
+
+
+## Reference
+
+```ts
+useIsomorphicLayoutEffect(effect: EffectCallback, deps?: ReadonlyArray | undefined);
+```
diff --git a/src/__stories__/useIsomorphicLayoutEffect.story.tsx b/src/__stories__/useIsomorphicLayoutEffect.story.tsx
new file mode 100644
index 0000000000..0907d68585
--- /dev/null
+++ b/src/__stories__/useIsomorphicLayoutEffect.story.tsx
@@ -0,0 +1,7 @@
+import { storiesOf } from '@storybook/react';
+import * as React from 'react';
+import ShowDocs from './util/ShowDocs';
+
+storiesOf('Lifecycle|useIsomorphicLayoutEffect', module).add('Docs', () => (
+
+));
diff --git a/src/index.ts b/src/index.ts
index 69002fa119..dd3723874f 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -25,6 +25,7 @@ import useGetSetState from './useGetSetState';
import useHover from './useHover';
import useHoverDirty from './useHoverDirty';
import useIdle from './useIdle';
+import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';
import useKey from './useKey';
import useKeyboardJs from './useKeyboardJs';
import useKeyPress from './useKeyPress';
@@ -102,6 +103,7 @@ export {
useHover,
useHoverDirty,
useIdle,
+ useIsomorphicLayoutEffect,
useKey,
useKeyboardJs,
useKeyPress,
diff --git a/src/useIsomorphicLayoutEffect.ts b/src/useIsomorphicLayoutEffect.ts
index 3e079ab1af..b285db7843 100644
--- a/src/useIsomorphicLayoutEffect.ts
+++ b/src/useIsomorphicLayoutEffect.ts
@@ -1,9 +1,5 @@
import { useEffect, useLayoutEffect } from 'react';
-/**
- * `useLayoutEffect` that does not show warning on server.
- * See: https://medium.com/@alexandereardon/uselayouteffect-and-ssr-192986cdcf7a
- */
const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
export default useIsomorphicLayoutEffect;