From fb3aea4f27ba99a14183c37ee7961d55fa9149e7 Mon Sep 17 00:00:00 2001 From: Qi Date: Thu, 16 Mar 2023 15:18:06 +0800 Subject: [PATCH] fix: fiberkey compatibility --- packages/react-simulator-renderer/src/renderer.ts | 4 ++-- .../src/utils/react-find-dom-nodes.ts | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/react-simulator-renderer/src/renderer.ts b/packages/react-simulator-renderer/src/renderer.ts index 766150028..1832ca99d 100644 --- a/packages/react-simulator-renderer/src/renderer.ts +++ b/packages/react-simulator-renderer/src/renderer.ts @@ -4,7 +4,7 @@ import { host } from './host'; import SimulatorRendererView from './renderer-view'; import { computed, observable as obx, untracked, makeObservable, configure } from 'mobx'; import { getClientRects } from './utils/get-client-rects'; -import { reactFindDOMNodes, FIBER_KEY } from './utils/react-find-dom-nodes'; +import { reactFindDOMNodes, getReactInternalFiber } from './utils/react-find-dom-nodes'; import { Asset, isElement, @@ -565,7 +565,7 @@ function getClosestNodeInstance( if (isElement(el)) { el = cacheReactKey(el); } else { - return getNodeInstance(el[FIBER_KEY], specId); + return getNodeInstance(getReactInternalFiber(el), specId); } } while (el) { diff --git a/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts b/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts index eb1fb41d5..d7af90346 100644 --- a/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts +++ b/packages/react-simulator-renderer/src/utils/react-find-dom-nodes.ts @@ -3,7 +3,9 @@ import { findDOMNode } from 'react-dom'; import { isElement } from '@alilc/lowcode-utils'; import { isDOMNode } from './is-dom-node'; -export const FIBER_KEY = '_reactInternalFiber'; +export const getReactInternalFiber = (el: any) => { + return el._reactInternals || el._reactInternalFiber; +}; function elementsFromFiber(fiber: any, elements: Array) { if (fiber) { @@ -28,7 +30,7 @@ export function reactFindDOMNodes(elem: ReactInstance | null): Array = []; - const fiberNode = (elem as any)[FIBER_KEY]; + const fiberNode = getReactInternalFiber(elem); elementsFromFiber(fiberNode?.child, elements); if (elements.length > 0) return elements; try {