Skip to content

Commit 43c8281

Browse files
author
Brian Vaughn
committed
Identify native hook index (for DevTools editable hooks)
1 parent 8ba7ad2 commit 43c8281

File tree

3 files changed

+105
-35
lines changed

3 files changed

+105
-35
lines changed

packages/react-debug-tools/src/ReactDebugHooks.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ function buildTree(rootStack, readHookLog): HooksTree {
373373
let rootChildren = [];
374374
let prevStack = null;
375375
let levelChildren = rootChildren;
376+
let nativeHookIndex = 0;
376377
let stackOfChildren = [];
377378
for (let i = 0; i < readHookLog.length; i++) {
378379
let hook = readHookLog[i];
@@ -403,6 +404,7 @@ function buildTree(rootStack, readHookLog): HooksTree {
403404
for (let j = stack.length - commonSteps - 1; j >= 1; j--) {
404405
let children = [];
405406
levelChildren.push({
407+
nativeHookIndex: -1,
406408
name: parseCustomHookName(stack[j - 1].functionName),
407409
value: undefined,
408410
subHooks: children,
@@ -413,6 +415,7 @@ function buildTree(rootStack, readHookLog): HooksTree {
413415
prevStack = stack;
414416
}
415417
levelChildren.push({
418+
nativeHookIndex: hook.primitive === 'DebugValue' ? -1 : nativeHookIndex++,
416419
name: hook.primitive,
417420
value: hook.value,
418421
subHooks: [],

packages/react-debug-tools/src/__tests__/ReactHooksInspection-test.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ describe('ReactHooksInspection', () => {
2828
let tree = ReactDebugTools.inspectHooks(Foo, {});
2929
expect(tree).toEqual([
3030
{
31+
nativeHookIndex: 0,
3132
name: 'State',
3233
value: 'hello world',
3334
subHooks: [],
@@ -48,10 +49,12 @@ describe('ReactHooksInspection', () => {
4849
let tree = ReactDebugTools.inspectHooks(Foo, {});
4950
expect(tree).toEqual([
5051
{
52+
nativeHookIndex: -1,
5153
name: 'Custom',
5254
value: __DEV__ ? 'custom hook label' : undefined,
5355
subHooks: [
5456
{
57+
nativeHookIndex: 0,
5558
name: 'State',
5659
value: 'hello world',
5760
subHooks: [],
@@ -80,31 +83,37 @@ describe('ReactHooksInspection', () => {
8083
let tree = ReactDebugTools.inspectHooks(Foo, {});
8184
expect(tree).toEqual([
8285
{
86+
nativeHookIndex: -1,
8387
name: 'Custom',
8488
value: undefined,
8589
subHooks: [
8690
{
91+
nativeHookIndex: 0,
8792
name: 'State',
8893
subHooks: [],
8994
value: 'hello',
9095
},
9196
{
97+
nativeHookIndex: 1,
9298
name: 'Effect',
9399
subHooks: [],
94100
value: effect,
95101
},
96102
],
97103
},
98104
{
105+
nativeHookIndex: -1,
99106
name: 'Custom',
100107
value: undefined,
101108
subHooks: [
102109
{
110+
nativeHookIndex: 2,
103111
name: 'State',
104112
value: 'world',
105113
subHooks: [],
106114
},
107115
{
116+
nativeHookIndex: 3,
108117
name: 'Effect',
109118
value: effect,
110119
subHooks: [],
@@ -143,50 +152,60 @@ describe('ReactHooksInspection', () => {
143152
let tree = ReactDebugTools.inspectHooks(Foo, {});
144153
expect(tree).toEqual([
145154
{
155+
nativeHookIndex: -1,
146156
name: 'Bar',
147157
value: undefined,
148158
subHooks: [
149159
{
160+
nativeHookIndex: -1,
150161
name: 'Custom',
151162
value: undefined,
152163
subHooks: [
153164
{
165+
nativeHookIndex: 0,
154166
name: 'Reducer',
155167
value: 'hello',
156168
subHooks: [],
157169
},
158170
{
171+
nativeHookIndex: 1,
159172
name: 'Effect',
160173
value: effect,
161174
subHooks: [],
162175
},
163176
],
164177
},
165178
{
179+
nativeHookIndex: 2,
166180
name: 'LayoutEffect',
167181
value: effect,
168182
subHooks: [],
169183
},
170184
],
171185
},
172186
{
187+
nativeHookIndex: -1,
173188
name: 'Baz',
174189
value: undefined,
175190
subHooks: [
176191
{
192+
nativeHookIndex: 3,
177193
name: 'LayoutEffect',
178194
value: effect,
179195
subHooks: [],
180196
},
181197
{
198+
nativeHookIndex: -1,
182199
name: 'Custom',
183200
subHooks: [
184201
{
202+
nativeHookIndex: 4,
185203
name: 'Reducer',
186204
subHooks: [],
187205
value: 'world',
188206
},
189207
{
208+
nativeHookIndex: 5,
190209
name: 'Effect',
191210
subHooks: [],
192211
value: effect,
@@ -208,6 +227,7 @@ describe('ReactHooksInspection', () => {
208227
let tree = ReactDebugTools.inspectHooks(Foo, {});
209228
expect(tree).toEqual([
210229
{
230+
nativeHookIndex: 0,
211231
name: 'Context',
212232
value: 'default',
213233
subHooks: [],
@@ -270,9 +290,12 @@ describe('ReactHooksInspection', () => {
270290
let tree = ReactDebugTools.inspectHooks(Foo, {});
271291
expect(tree).toEqual([
272292
{
293+
nativeHookIndex: -1,
273294
name: 'Custom',
274295
value: __DEV__ ? 'bar:123' : undefined,
275-
subHooks: [{name: 'State', subHooks: [], value: 0}],
296+
subHooks: [
297+
{nativeHookIndex: 0, name: 'State', subHooks: [], value: 0},
298+
],
276299
},
277300
]);
278301
});

0 commit comments

Comments
 (0)