From efce5373fdce3aca6c78d12187b9ba15a20191bf Mon Sep 17 00:00:00 2001 From: oyzhen Date: Thu, 1 Apr 2021 03:59:17 +0800 Subject: [PATCH] Aligning DOM checking condition to what facebook/react does (#4114) * feat: add Deno SSR support * fix: check if DOM available as React does Co-authored-by: oyzhen --- .../src/hooks/use-isomorphic-layout-effect.ts | 8 +++++--- packages/slate-react/src/utils/environment.ts | 10 ++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/slate-react/src/hooks/use-isomorphic-layout-effect.ts b/packages/slate-react/src/hooks/use-isomorphic-layout-effect.ts index 2587f0b65..14671c12b 100644 --- a/packages/slate-react/src/hooks/use-isomorphic-layout-effect.ts +++ b/packages/slate-react/src/hooks/use-isomorphic-layout-effect.ts @@ -1,7 +1,9 @@ import { useLayoutEffect, useEffect } from 'react' +import { CAN_USE_DOM } from '../utils/environment' /** - * Prevent warning on SSR by falling back to useEffect when window is not defined + * Prevent warning on SSR by falling back to useEffect when DOM isn't available */ -export const useIsomorphicLayoutEffect = - typeof window !== 'undefined' ? useLayoutEffect : useEffect +export const useIsomorphicLayoutEffect = CAN_USE_DOM + ? useLayoutEffect + : useEffect diff --git a/packages/slate-react/src/utils/environment.ts b/packages/slate-react/src/utils/environment.ts index 3d257ce1e..ca3101894 100644 --- a/packages/slate-react/src/utils/environment.ts +++ b/packages/slate-react/src/utils/environment.ts @@ -27,3 +27,13 @@ export const IS_CHROME = export const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent) + +/** + * Check if DOM is available as React does internally. + * @see https://github.com/facebook/react/blob/master/packages/shared/ExecutionEnvironment.js + */ +export const CAN_USE_DOM = !!( + typeof window !== 'undefined' && + typeof window.document !== 'undefined' && + typeof window.document.createElement !== 'undefined' +)