From 14d030073a5df0042ca6090e09c8ddd7922b1cb6 Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Wed, 14 Apr 2021 13:29:57 -0400 Subject: [PATCH 1/2] Reconciler should inject its own version into DevTools hook --- packages/react-reconciler/src/ReactFiberReconciler.new.js | 5 ++++- packages/react-reconciler/src/ReactFiberReconciler.old.js | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/react-reconciler/src/ReactFiberReconciler.new.js b/packages/react-reconciler/src/ReactFiberReconciler.new.js index 4572e4d9de4ba..f6318f0a03052 100644 --- a/packages/react-reconciler/src/ReactFiberReconciler.new.js +++ b/packages/react-reconciler/src/ReactFiberReconciler.new.js @@ -95,7 +95,7 @@ import { findHostInstancesForRefresh, } from './ReactFiberHotReloading.new'; import {markRenderScheduled} from './SchedulingProfiler'; - +import ReactVersion from 'shared/ReactVersion'; export {registerMutableSourceForHydration} from './ReactMutableSource.new'; export {createPortal} from './ReactPortal'; export { @@ -739,5 +739,8 @@ export function injectIntoDevTools(devToolsConfig: DevToolsConfig): boolean { setRefreshHandler: __DEV__ ? setRefreshHandler : null, // Enables DevTools to append owner stacks to error messages in DEV mode. getCurrentFiber: __DEV__ ? getCurrentFiberForDevTools : null, + // Enables DevTools to detect reconciler version rather than renderer version + // which may not match for third party renderers. + reconcilerVersion: ReactVersion, }); } diff --git a/packages/react-reconciler/src/ReactFiberReconciler.old.js b/packages/react-reconciler/src/ReactFiberReconciler.old.js index abd5b9094c59c..68a6ed619bbda 100644 --- a/packages/react-reconciler/src/ReactFiberReconciler.old.js +++ b/packages/react-reconciler/src/ReactFiberReconciler.old.js @@ -95,7 +95,7 @@ import { findHostInstancesForRefresh, } from './ReactFiberHotReloading.old'; import {markRenderScheduled} from './SchedulingProfiler'; - +import ReactVersion from 'shared/ReactVersion'; export {registerMutableSourceForHydration} from './ReactMutableSource.old'; export {createPortal} from './ReactPortal'; export { @@ -739,5 +739,8 @@ export function injectIntoDevTools(devToolsConfig: DevToolsConfig): boolean { setRefreshHandler: __DEV__ ? setRefreshHandler : null, // Enables DevTools to append owner stacks to error messages in DEV mode. getCurrentFiber: __DEV__ ? getCurrentFiberForDevTools : null, + // Enables DevTools to detect reconciler version rather than renderer version + // which may not match for third party renderers. + reconcilerVersion: ReactVersion, }); } From 0cc74e2afbd3506ec8ac2c051682df5cb1d46a5b Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Wed, 14 Apr 2021 14:01:33 -0400 Subject: [PATCH 2/2] DevTools should use injected reconciler version when available --- packages/react-devtools-shared/src/backend/renderer.js | 8 +++++++- packages/react-devtools-shared/src/backend/types.js | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/react-devtools-shared/src/backend/renderer.js b/packages/react-devtools-shared/src/backend/renderer.js index b006c9166f53c..807bbde0c7997 100644 --- a/packages/react-devtools-shared/src/backend/renderer.js +++ b/packages/react-devtools-shared/src/backend/renderer.js @@ -503,13 +503,19 @@ export function attach( renderer: ReactRenderer, global: Object, ): RendererInterface { + // Newer versions of the reconciler package also specific reconciler version. + // If that version number is present, use it. + // Third party renderer versions may not match the reconciler version, + // and the latter is what's important in terms of tags and symbols. + const version = renderer.reconcilerVersion || renderer.version; + const { getDisplayNameForFiber, getTypeSymbol, ReactPriorityLevels, ReactTypeOfWork, ReactTypeOfSideEffect, - } = getInternalReactConstants(renderer.version); + } = getInternalReactConstants(version); const {Incomplete, NoFlags, PerformedWork, Placement} = ReactTypeOfSideEffect; const { CacheComponent, diff --git a/packages/react-devtools-shared/src/backend/types.js b/packages/react-devtools-shared/src/backend/types.js index f80211168c634..466a5b7fa2ddb 100644 --- a/packages/react-devtools-shared/src/backend/types.js +++ b/packages/react-devtools-shared/src/backend/types.js @@ -137,6 +137,8 @@ export type ReactRenderer = { // Only injected by React v16.9+ in DEV mode. // Enables DevTools to append owners-only component stack to error messages. getCurrentFiber?: () => Fiber | null, + // 17.0.2+ + reconcilerVersion?: string, // Uniquely identifies React DOM v15. ComponentTree?: any, // Present for React DOM v12 (possibly earlier) through v15.