Skip to content

Commit 399fefc

Browse files
author
Brian Vaughn
committed
Poll for update only refreshes cache when there's an update
1 parent 07ca66a commit 399fefc

3 files changed

Lines changed: 31 additions & 12 deletions

File tree

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ export type OwnersList = {|
5656
owners: Array<Owner> | null,
5757
|};
5858

59+
export type InspectedElementResponseType =
60+
| 'full-data'
61+
| 'hydrated-path'
62+
| 'no-change'
63+
| 'not-found';
64+
5965
export type InspectedElement = {|
6066
id: number,
6167

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import type {Wakeable} from 'shared/ReactTypes';
1919
import type {
2020
Element,
2121
InspectedElement as InspectedElementFrontend,
22+
InspectedElementResponseType,
2223
} from 'react-devtools-shared/src/devtools/views/Components/types';
2324

2425
const Pending = 0;
@@ -122,7 +123,7 @@ export function inspectElement(
122123
path,
123124
rendererID: ((rendererID: any): number),
124125
}).then(
125-
(inspectedElement: InspectedElementFrontend) => {
126+
([inspectedElement: InspectedElementFrontend]) => {
126127
const resolvedRecord = ((newRecord: any): ResolvedRecord<InspectedElementFrontend>);
127128
resolvedRecord.status = Resolved;
128129
resolvedRecord.value = inspectedElement;
@@ -174,12 +175,18 @@ export function checkForUpdate({
174175
element,
175176
path: null,
176177
rendererID: ((rendererID: any): number),
177-
}).then((inspectedElement: InspectedElementFrontend) => {
178-
// TODO only start transition if we got an update; right now we over-update even after "no-change"
179-
startTransition(() => {
180-
const [key, value] = createCacheSeed(element, inspectedElement);
181-
refresh(key, value);
182-
});
183-
});
178+
}).then(
179+
([
180+
inspectedElement: InspectedElementFrontend,
181+
responseType: InspectedElementResponseType,
182+
]) => {
183+
if (responseType === 'full-data') {
184+
startTransition(() => {
185+
const [key, value] = createCacheSeed(element, inspectedElement);
186+
refresh(key, value);
187+
});
188+
}
189+
},
190+
);
184191
}
185192
}

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

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import type {
2222
import type {
2323
Element,
2424
InspectedElement as InspectedElementFrontend,
25+
InspectedElementResponseType,
2526
} from 'react-devtools-shared/src/devtools/views/Components/types';
2627

2728
// Map an Element in the Store to the most recent copy of its inspected data.
@@ -36,6 +37,11 @@ const inspectedElementMap: WeakMap<
3637

3738
type Path = Array<string | number>;
3839

40+
type InspectElementReturnType = [
41+
InspectedElementFrontend,
42+
InspectedElementResponseType,
43+
];
44+
3945
export function inspectElement({
4046
bridge,
4147
element,
@@ -46,7 +52,7 @@ export function inspectElement({
4652
element: Element,
4753
path: Path | null,
4854
rendererID: number,
49-
|}): Promise<InspectedElementFrontend> {
55+
|}): Promise<InspectElementReturnType> {
5056
const {id} = element;
5157
return inspectElementAPI({
5258
bridge,
@@ -62,7 +68,7 @@ export function inspectElement({
6268
// This is a no-op for the purposes of our cache.
6369
inspectedElement = inspectedElementMap.get(element);
6470
if (inspectedElement != null) {
65-
return inspectedElement;
71+
return [inspectedElement, type];
6672
}
6773
break;
6874

@@ -84,7 +90,7 @@ export function inspectElement({
8490

8591
inspectedElementMap.set(element, inspectedElement);
8692

87-
return inspectedElement;
93+
return [inspectedElement, type];
8894

8995
case 'hydrated-path':
9096
const hydratedPathData = ((data: any): InspectElementHydratedPath);
@@ -107,7 +113,7 @@ export function inspectElement({
107113

108114
inspectedElementMap.set(element, inspectedElement);
109115

110-
return inspectedElement;
116+
return [inspectedElement, type];
111117
}
112118
break;
113119

0 commit comments

Comments
 (0)