Track parentID for ReactPerf
Dan Abramov committed
Apr 21, 2016 at 17:55 UTC
ab0ef89ec77962a39e3621ab4ce46cc073d3d7b2
2 files changed
+38
-14
src/isomorphic/devtools/ReactComponentTreeDevtool.js
+24
-10
@@ -50,20 +50,34 @@ var ReactComponentTreeDevtool = {
50
updateTree(id, item => item.displayName = displayName);
51
},
52
53
- onSetChildren(id, childIDs) {
54
- childIDs.forEach(childID => {
55
- var childItem = tree[childID];
56
- expect(childItem).toBeDefined();
57
- expect(childItem.isComposite).toBeDefined();
58
- expect(childItem.displayName).toBeDefined();
59
- expect(childItem.childIDs || childItem.text).toBeDefined();
53
+ onSetChildren(id, nextChildIDs) {
54
+ var prevChildIDs;
55
+ updateTree(id, item => {
56
+ prevChildIDs = item.childIDs || [];
57
+ item.childIDs = nextChildIDs;
58
});
59
62
- updateTree(id, item => item.childIDs = childIDs);
60
+ prevChildIDs.forEach(prevChildID => {
61
+ if (tree[prevChildID] && nextChildIDs.indexOf(prevChildID) === -1) {
62
+ tree[prevChildID].parentID = null;
63
+ }
64
+ });
65
+
66
+ nextChildIDs.forEach(nextChildID => {
67
+ var item = tree[nextChildID];
68
+ expect(item).toBeDefined();
69
+ expect(item.isComposite).toBeDefined();
70
+ expect(item.displayName).toBeDefined();
71
+ expect(item.childIDs || item.text).toBeDefined();
72
+
73
+ if (tree[nextChildID] && prevChildIDs.indexOf(nextChildID) === -1) {
74
+ tree[nextChildID].parentID = id;
75
+ }
76
+ });
77
},
78
65
- onSetOwner(id, ownerDebugID) {
66
- updateTree(id, item => item.ownerDebugID = ownerDebugID);
79
+ onSetOwner(id, ownerID) {
80
+ updateTree(id, item => item.ownerID = ownerID);
81
},
82
83
onSetText(id, text) {
src/isomorphic/devtools/__tests__/ReactComponentTreeDevtool-test.js
+14
-4
@@ -36,22 +36,32 @@ describe('ReactComponentTreeDevtool', () => {
36
ReactDebugTool.removeDevtool(ReactComponentTreeDevtool);
37
});
38
39
- function denormalizeTree(tree, rootID, includeOwner) {
39
+ function denormalizeTree(
40
+ tree,
41
+ rootID,
42
+ includeOwner = false,
43
+ expectedParentID = null
44
+ ) {
45
var item = tree[rootID];
46
var result = {
47
isComposite: item.isComposite,
48
displayName: item.displayName,
49
};
50
+
51
+ if (expectedParentID) {
52
+ expect(item.parentID).toBe(expectedParentID);
53
+ }
54
+
55
if (item.childIDs) {
56
result.children = item.childIDs.map(childID =>
47
- denormalizeTree(tree, childID, includeOwner)
57
+ denormalizeTree(tree, childID, includeOwner, rootID)
58
);
59
}
60
if (item.text != null) {
61
result.text = item.text;
62
}
53
- if (includeOwner && item.ownerDebugID) {
54
- result.ownerDisplayName = tree[item.ownerDebugID].displayName;
63
+ if (includeOwner && item.ownerID) {
64
+ result.ownerDisplayName = tree[item.ownerID].displayName;
65
}
66
return result;
67
}