From bdb4a96f628d3b426d3c79fbd598ec35c05835a3 Mon Sep 17 00:00:00 2001 From: "Sebastian \"Sebbie\" Silbermann" Date: Fri, 1 Aug 2025 17:49:25 +0200 Subject: [PATCH] [DevTools] Lazily compute initial Tree state (#34078) --- .../devtools/views/Components/TreeContext.js | 75 ++++++++++++------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/packages/react-devtools-shared/src/devtools/views/Components/TreeContext.js b/packages/react-devtools-shared/src/devtools/views/Components/TreeContext.js index 46c76462d09..797ffcd0f6e 100644 --- a/packages/react-devtools-shared/src/devtools/views/Components/TreeContext.js +++ b/packages/react-devtools-shared/src/devtools/views/Components/TreeContext.js @@ -803,6 +803,45 @@ type Props = { defaultInspectedElementIndex?: ?number, }; +function getInitialState({ + defaultOwnerID, + defaultInspectedElementID, + defaultInspectedElementIndex, + store, +}: { + defaultOwnerID?: ?number, + defaultInspectedElementID?: ?number, + defaultInspectedElementIndex?: ?number, + store: Store, +}): State { + return { + // Tree + numElements: store.numElements, + ownerSubtreeLeafElementID: null, + + // Search + searchIndex: null, + searchResults: [], + searchText: '', + + // Owners + ownerID: defaultOwnerID == null ? null : defaultOwnerID, + ownerFlatTree: null, + + // Inspection element panel + inspectedElementID: + defaultInspectedElementID != null + ? defaultInspectedElementID + : store.lastSelectedHostInstanceElementId, + inspectedElementIndex: + defaultInspectedElementIndex != null + ? defaultInspectedElementIndex + : store.lastSelectedHostInstanceElementId + ? store.getIndexOfElementID(store.lastSelectedHostInstanceElementId) + : null, + }; +} + // TODO Remove TreeContextController wrapper element once global Context.write API exists. function TreeContextController({ children, @@ -866,32 +905,16 @@ function TreeContextController({ [store], ); - const [state, dispatch] = useReducer(reducer, { - // Tree - numElements: store.numElements, - ownerSubtreeLeafElementID: null, - - // Search - searchIndex: null, - searchResults: [], - searchText: '', - - // Owners - ownerID: defaultOwnerID == null ? null : defaultOwnerID, - ownerFlatTree: null, - - // Inspection element panel - inspectedElementID: - defaultInspectedElementID != null - ? defaultInspectedElementID - : store.lastSelectedHostInstanceElementId, - inspectedElementIndex: - defaultInspectedElementIndex != null - ? defaultInspectedElementIndex - : store.lastSelectedHostInstanceElementId - ? store.getIndexOfElementID(store.lastSelectedHostInstanceElementId) - : null, - }); + const [state, dispatch] = useReducer( + reducer, + { + defaultOwnerID, + defaultInspectedElementID, + defaultInspectedElementIndex, + store, + }, + getInitialState, + ); const transitionDispatch = useMemo( () => (action: Action) => startTransition(() => {