diff --git a/packages/core/changelog/@unreleased/pr-7137.v2.yml b/packages/core/changelog/@unreleased/pr-7137.v2.yml new file mode 100644 index 0000000000..5ddd8f0717 --- /dev/null +++ b/packages/core/changelog/@unreleased/pr-7137.v2.yml @@ -0,0 +1,5 @@ +type: improvement +improvement: + description: Update React version check in Portal component to support React 18 and newer versions. + links: + - https://github.com/palantir/blueprint/pull/7137 diff --git a/packages/core/src/common/utils/reactUtils.ts b/packages/core/src/common/utils/reactUtils.ts index 6ec7a1ab18..f587fb783e 100644 --- a/packages/core/src/common/utils/reactUtils.ts +++ b/packages/core/src/common/utils/reactUtils.ts @@ -124,6 +124,7 @@ export function isElementOfType
( ); } -export function isReact18(): boolean { - return React.version.startsWith("18"); +export function isReact18OrHigher(): boolean { + const majorVersion = parseInt(React.version.split(".")[0], 10); + return majorVersion >= 18; } diff --git a/packages/core/src/components/portal/portal.tsx b/packages/core/src/components/portal/portal.tsx index d1a0960f67..1cacf827c1 100644 --- a/packages/core/src/components/portal/portal.tsx +++ b/packages/core/src/components/portal/portal.tsx @@ -20,7 +20,7 @@ import * as ReactDOM from "react-dom"; import { Classes, DISPLAYNAME_PREFIX, type Props } from "../../common"; import type { ValidationMap } from "../../common/context"; import * as Errors from "../../common/errors"; -import { isReact18 } from "../../common/utils/reactUtils"; +import { isReact18OrHigher } from "../../common/utils/reactUtils"; import { PortalContext } from "../../context/portal/portalProvider"; export interface PortalProps extends Props { @@ -157,7 +157,7 @@ export function Portal( Portal.displayName = `${DISPLAYNAME_PREFIX}.Portal`; // only use legacy context in React 16 or 17 -if (!isReact18()) { +if (!isReact18OrHigher()) { // eslint-disable-next-line deprecation/deprecation Portal.contextTypes = PORTAL_LEGACY_CONTEXT_TYPES; }