Skip to content

Commit cd39d93

Browse files
author
Brian Vaughn
committed
DevTools should use injected reconciler version when available
1 parent 14d0300 commit cd39d93

File tree

8 files changed

+52
-4
lines changed

8 files changed

+52
-4
lines changed

packages/react-devtools-shared/src/__tests__/inspectedElement-test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2428,4 +2428,19 @@ describe('InspectedElement', () => {
24282428
`);
24292429
});
24302430
});
2431+
2432+
it('should include both renderer and reconciler versions when present', async () => {
2433+
const Example = () => {
2434+
return null;
2435+
};
2436+
2437+
const container = document.createElement('div');
2438+
await utils.actAsync(() => ReactDOM.render(<Example />, container));
2439+
2440+
const ReactVersion = require('shared/ReactVersion').default;
2441+
2442+
const inspectedElement = await inspectElementAtIndex(0);
2443+
expect(inspectedElement.reconcilerVersion).toBe(ReactVersion);
2444+
expect(inspectedElement.rendererVersion).toBe(ReactVersion);
2445+
});
24312446
});

packages/react-devtools-shared/src/backend/legacy/renderer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,7 @@ export function attach(
832832
rootType: null,
833833
rendererPackageName: null,
834834
rendererVersion: null,
835+
reconcilerVersion: null,
835836
};
836837
}
837838

packages/react-devtools-shared/src/backend/renderer.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,13 +503,19 @@ export function attach(
503503
renderer: ReactRenderer,
504504
global: Object,
505505
): RendererInterface {
506+
// Newer versions of the reconciler package also specific reconciler version.
507+
// If that version number is present, use it.
508+
// Third party renderer versions may not match the reconciler version,
509+
// and the latter is what's important in terms of tags and symbols.
510+
const version = renderer.reconcilerVersion || renderer.version;
511+
506512
const {
507513
getDisplayNameForFiber,
508514
getTypeSymbol,
509515
ReactPriorityLevels,
510516
ReactTypeOfWork,
511517
ReactTypeOfSideEffect,
512-
} = getInternalReactConstants(renderer.version);
518+
} = getInternalReactConstants(version);
513519
const {Incomplete, NoFlags, PerformedWork, Placement} = ReactTypeOfSideEffect;
514520
const {
515521
CacheComponent,
@@ -2903,6 +2909,7 @@ export function attach(
29032909
rootType,
29042910
rendererPackageName: renderer.rendererPackageName,
29052911
rendererVersion: renderer.version,
2912+
reconcilerVersion: renderer.reconcilerVersion || null,
29062913
};
29072914
}
29082915

packages/react-devtools-shared/src/backend/types.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,8 @@ export type ReactRenderer = {
137137
// Only injected by React v16.9+ in DEV mode.
138138
// Enables DevTools to append owners-only component stack to error messages.
139139
getCurrentFiber?: () => Fiber | null,
140+
// 17.0.2+
141+
reconcilerVersion?: string,
140142
// Uniquely identifies React DOM v15.
141143
ComponentTree?: any,
142144
// Present for React DOM v12 (possibly earlier) through v15.
@@ -259,6 +261,7 @@ export type InspectedElement = {|
259261
// Meta information about the renderer that created this element.
260262
rendererPackageName: string | null,
261263
rendererVersion: string | null,
264+
reconcilerVersion: string | null,
262265
|};
263266

264267
export const InspectElementFullDataType = 'full-data';

packages/react-devtools-shared/src/backendAPI.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ export function convertInspectedElementBackendToFrontend(
200200
context,
201201
hooks,
202202
props,
203+
reconcilerVersion,
203204
rendererPackageName,
204205
rendererVersion,
205206
rootType,
@@ -221,6 +222,7 @@ export function convertInspectedElementBackendToFrontend(
221222
hasLegacyContext,
222223
id,
223224
key,
225+
reconcilerVersion,
224226
rendererPackageName,
225227
rendererVersion,
226228
rootType,

packages/react-devtools-shared/src/devtools/views/Components/InspectedElementView.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,8 @@
9494
white-space: nowrap;
9595
overflow: hidden;
9696
text-overflow: ellipsis;
97+
}
98+
99+
.OwnersMetaVersionsWrapper {
100+
97101
}

packages/react-devtools-shared/src/devtools/views/Components/InspectedElementView.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ export default function InspectedElementView({
5353
const {id} = element;
5454
const {
5555
owners,
56+
reconcilerVersion,
5657
rendererPackageName,
5758
rendererVersion,
5859
rootType,
@@ -71,9 +72,14 @@ export default function InspectedElementView({
7172
rendererPackageName !== null && rendererVersion !== null
7273
? `${rendererPackageName}@${rendererVersion}`
7374
: null;
75+
const reconcilerLabel =
76+
reconcilerVersion !== null ? `react-reconciler@${reconcilerVersion}` : null;
7477
const showOwnersList = owners !== null && owners.length > 0;
7578
const showRenderedBy =
76-
showOwnersList || rendererLabel !== null || rootType !== null;
79+
showOwnersList ||
80+
reconcilerLabel !== null ||
81+
rendererLabel !== null ||
82+
rootType !== null;
7783

7884
return (
7985
<Fragment>
@@ -140,8 +146,17 @@ export default function InspectedElementView({
140146
{rootType !== null && (
141147
<div className={styles.OwnersMetaField}>{rootType}</div>
142148
)}
143-
{rendererLabel !== null && (
144-
<div className={styles.OwnersMetaField}>{rendererLabel}</div>
149+
{(rendererLabel !== null || reconcilerLabel !== null) && (
150+
<div className={styles.OwnersMetaVersionsWrapper}>
151+
{rendererLabel !== null && (
152+
<div className={styles.OwnersMetaField}>{rendererLabel}</div>
153+
)}
154+
{reconcilerLabel !== null && (
155+
<div className={styles.OwnersMetaField}>
156+
{reconcilerLabel}
157+
</div>
158+
)}
159+
</div>
145160
)}
146161
</div>
147162
)}

packages/react-devtools-shared/src/devtools/views/Components/types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ export type InspectedElement = {|
108108
// Meta information about the renderer that created this element.
109109
rendererPackageName: string | null,
110110
rendererVersion: string | null,
111+
reconcilerVersion: string | null,
111112
|};
112113

113114
// TODO: Add profiling type

0 commit comments

Comments
 (0)