From 192c9838b3fee822fdee10c25173ed504bf43101 Mon Sep 17 00:00:00 2001 From: Ward Oosterlijnck Date: Wed, 10 Jul 2019 20:47:52 +1000 Subject: [PATCH 1/2] Export useIsomorphicLayoutEffect + docs --- docs/useIsomorphicLayoutEffect.md | 24 +++++++++++++++++++ .../useIsomorphicLayoutEffect.story.tsx | 7 ++++++ src/index.ts | 2 ++ src/useIsomorphicLayoutEffect.ts | 4 ---- 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 docs/useIsomorphicLayoutEffect.md create mode 100644 src/__stories__/useIsomorphicLayoutEffect.story.tsx 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 be432e22d6..fcafe0af15 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'; @@ -101,6 +102,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; From 4654efc3d4f2c0744270935b98428d9e38a4dd3a Mon Sep 17 00:00:00 2001 From: Ward Oosterlijnck Date: Wed, 10 Jul 2019 20:57:13 +1000 Subject: [PATCH 2/2] add useIsomorphicLayoutEffect to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cf579266b6..05dcb64009 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,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