mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
add <TracingMarker> component boilerplate (#23275)
- Add Tracing Marker component type to React exports - Add reconciler work tag - Add devtools work tag - Add boilerplate for the cache to render children No functionality yet
This commit is contained in:
@@ -24,6 +24,7 @@ import {
|
||||
ElementTypeRoot,
|
||||
ElementTypeSuspense,
|
||||
ElementTypeSuspenseList,
|
||||
ElementTypeTracingMarker,
|
||||
StrictMode,
|
||||
} from 'react-devtools-shared/src/types';
|
||||
import {
|
||||
@@ -247,6 +248,8 @@ export function getInternalReactConstants(
|
||||
SimpleMemoComponent: 15,
|
||||
SuspenseComponent: 13,
|
||||
SuspenseListComponent: 19, // Experimental
|
||||
TracingMarkerComponent: 25, // Experimental - This is technically in 18 but we don't
|
||||
// want to fork again so we're adding it here instead
|
||||
YieldComponent: -1, // Removed
|
||||
};
|
||||
} else if (gte(version, '17.0.0-alpha')) {
|
||||
@@ -277,6 +280,7 @@ export function getInternalReactConstants(
|
||||
SimpleMemoComponent: 15,
|
||||
SuspenseComponent: 13,
|
||||
SuspenseListComponent: 19, // Experimental
|
||||
TracingMarkerComponent: -1, // Doesn't exist yet
|
||||
YieldComponent: -1, // Removed
|
||||
};
|
||||
} else if (gte(version, '16.6.0-beta.0')) {
|
||||
@@ -307,6 +311,7 @@ export function getInternalReactConstants(
|
||||
SimpleMemoComponent: 15,
|
||||
SuspenseComponent: 13,
|
||||
SuspenseListComponent: 19, // Experimental
|
||||
TracingMarkerComponent: -1, // Doesn't exist yet
|
||||
YieldComponent: -1, // Removed
|
||||
};
|
||||
} else if (gte(version, '16.4.3-alpha')) {
|
||||
@@ -337,6 +342,7 @@ export function getInternalReactConstants(
|
||||
SimpleMemoComponent: -1, // Doesn't exist yet
|
||||
SuspenseComponent: 16,
|
||||
SuspenseListComponent: -1, // Doesn't exist yet
|
||||
TracingMarkerComponent: -1, // Doesn't exist yet
|
||||
YieldComponent: -1, // Removed
|
||||
};
|
||||
} else {
|
||||
@@ -367,6 +373,7 @@ export function getInternalReactConstants(
|
||||
SimpleMemoComponent: -1, // Doesn't exist yet
|
||||
SuspenseComponent: 16,
|
||||
SuspenseListComponent: -1, // Doesn't exist yet
|
||||
TracingMarkerComponent: -1, // Doesn't exist yet
|
||||
YieldComponent: 9,
|
||||
};
|
||||
}
|
||||
@@ -405,6 +412,7 @@ export function getInternalReactConstants(
|
||||
SimpleMemoComponent,
|
||||
SuspenseComponent,
|
||||
SuspenseListComponent,
|
||||
TracingMarkerComponent,
|
||||
} = ReactTypeOfWork;
|
||||
|
||||
function resolveFiberType(type: any) {
|
||||
@@ -484,6 +492,8 @@ export function getInternalReactConstants(
|
||||
return 'SuspenseList';
|
||||
case Profiler:
|
||||
return 'Profiler';
|
||||
case TracingMarkerComponent:
|
||||
return 'TracingMarker';
|
||||
default:
|
||||
const typeSymbol = getTypeSymbol(type);
|
||||
|
||||
@@ -583,6 +593,7 @@ export function attach(
|
||||
SimpleMemoComponent,
|
||||
SuspenseComponent,
|
||||
SuspenseListComponent,
|
||||
TracingMarkerComponent,
|
||||
} = ReactTypeOfWork;
|
||||
const {
|
||||
ImmediatePriority,
|
||||
@@ -1044,6 +1055,8 @@ export function attach(
|
||||
return ElementTypeSuspense;
|
||||
case SuspenseListComponent:
|
||||
return ElementTypeSuspenseList;
|
||||
case TracingMarkerComponent:
|
||||
return ElementTypeTracingMarker;
|
||||
default:
|
||||
const typeSymbol = getTypeSymbol(type);
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ export type WorkTagMap = {|
|
||||
SimpleMemoComponent: WorkTag,
|
||||
SuspenseComponent: WorkTag,
|
||||
SuspenseListComponent: WorkTag,
|
||||
TracingMarkerComponent: WorkTag,
|
||||
YieldComponent: WorkTag,
|
||||
|};
|
||||
|
||||
|
||||
+2
-1
@@ -32,11 +32,12 @@ export const ElementTypeProfiler = 10;
|
||||
export const ElementTypeRoot = 11;
|
||||
export const ElementTypeSuspense = 12;
|
||||
export const ElementTypeSuspenseList = 13;
|
||||
export const ElementTypeTracingMarker = 14;
|
||||
|
||||
// Different types of elements displayed in the Elements tree.
|
||||
// These types may be used to visually distinguish types,
|
||||
// or to enable/disable certain functionality.
|
||||
export type ElementType = 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13;
|
||||
export type ElementType = 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14;
|
||||
|
||||
// WARNING
|
||||
// The values below are referenced by ComponentFilters (which are saved via localStorage).
|
||||
|
||||
+6
-1
@@ -22,7 +22,10 @@ import {
|
||||
StrictMode,
|
||||
Suspense,
|
||||
} from 'react-is';
|
||||
import {REACT_SUSPENSE_LIST_TYPE as SuspenseList} from 'shared/ReactSymbols';
|
||||
import {
|
||||
REACT_SUSPENSE_LIST_TYPE as SuspenseList,
|
||||
REACT_TRACING_MARKER_TYPE as TracingMarker,
|
||||
} from 'shared/ReactSymbols';
|
||||
import {
|
||||
TREE_OPERATION_ADD,
|
||||
TREE_OPERATION_REMOVE,
|
||||
@@ -684,6 +687,8 @@ export function getDisplayNameForReactElement(
|
||||
return 'Suspense';
|
||||
case SuspenseList:
|
||||
return 'SuspenseList';
|
||||
case TracingMarker:
|
||||
return 'TracingMarker';
|
||||
default:
|
||||
const {type} = element;
|
||||
if (typeof type === 'string') {
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
enableScopeAPI,
|
||||
enableSyncDefaultUpdates,
|
||||
allowConcurrentByDefault,
|
||||
enableTransitionTracing,
|
||||
} from 'shared/ReactFeatureFlags';
|
||||
import {
|
||||
supportsPersistence,
|
||||
@@ -56,6 +57,7 @@ import {
|
||||
OffscreenComponent,
|
||||
LegacyHiddenComponent,
|
||||
CacheComponent,
|
||||
TracingMarkerComponent,
|
||||
} from './ReactWorkTags';
|
||||
import getComponentNameFromFiber from 'react-reconciler/src/getComponentNameFromFiber';
|
||||
|
||||
@@ -91,6 +93,7 @@ import {
|
||||
REACT_OFFSCREEN_TYPE,
|
||||
REACT_LEGACY_HIDDEN_TYPE,
|
||||
REACT_CACHE_TYPE,
|
||||
REACT_TRACING_MARKER_TYPE,
|
||||
} from 'shared/ReactSymbols';
|
||||
|
||||
export type {Fiber};
|
||||
@@ -521,6 +524,11 @@ export function createFiberFromTypeAndProps(
|
||||
return createFiberFromCache(pendingProps, mode, lanes, key);
|
||||
}
|
||||
// eslint-disable-next-line no-fallthrough
|
||||
case REACT_TRACING_MARKER_TYPE:
|
||||
if (enableTransitionTracing) {
|
||||
return createFiberFromTracingMarker(pendingProps, mode, lanes, key);
|
||||
}
|
||||
// eslint-disable-next-line no-fallthrough
|
||||
default: {
|
||||
if (typeof type === 'object' && type !== null) {
|
||||
switch (type.$$typeof) {
|
||||
@@ -746,6 +754,18 @@ export function createFiberFromCache(
|
||||
return fiber;
|
||||
}
|
||||
|
||||
export function createFiberFromTracingMarker(
|
||||
pendingProps: any,
|
||||
mode: TypeOfMode,
|
||||
lanes: Lanes,
|
||||
key: null | string,
|
||||
) {
|
||||
const fiber = createFiber(TracingMarkerComponent, pendingProps, key, mode);
|
||||
fiber.elementType = REACT_TRACING_MARKER_TYPE;
|
||||
fiber.lanes = lanes;
|
||||
return fiber;
|
||||
}
|
||||
|
||||
export function createFiberFromText(
|
||||
content: string,
|
||||
mode: TypeOfMode,
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
enableScopeAPI,
|
||||
enableSyncDefaultUpdates,
|
||||
allowConcurrentByDefault,
|
||||
enableTransitionTracing,
|
||||
} from 'shared/ReactFeatureFlags';
|
||||
import {
|
||||
supportsPersistence,
|
||||
@@ -56,6 +57,7 @@ import {
|
||||
OffscreenComponent,
|
||||
LegacyHiddenComponent,
|
||||
CacheComponent,
|
||||
TracingMarkerComponent,
|
||||
} from './ReactWorkTags';
|
||||
import getComponentNameFromFiber from 'react-reconciler/src/getComponentNameFromFiber';
|
||||
|
||||
@@ -91,6 +93,7 @@ import {
|
||||
REACT_OFFSCREEN_TYPE,
|
||||
REACT_LEGACY_HIDDEN_TYPE,
|
||||
REACT_CACHE_TYPE,
|
||||
REACT_TRACING_MARKER_TYPE,
|
||||
} from 'shared/ReactSymbols';
|
||||
|
||||
export type {Fiber};
|
||||
@@ -521,6 +524,11 @@ export function createFiberFromTypeAndProps(
|
||||
return createFiberFromCache(pendingProps, mode, lanes, key);
|
||||
}
|
||||
// eslint-disable-next-line no-fallthrough
|
||||
case REACT_TRACING_MARKER_TYPE:
|
||||
if (enableTransitionTracing) {
|
||||
return createFiberFromTracingMarker(pendingProps, mode, lanes, key);
|
||||
}
|
||||
// eslint-disable-next-line no-fallthrough
|
||||
default: {
|
||||
if (typeof type === 'object' && type !== null) {
|
||||
switch (type.$$typeof) {
|
||||
@@ -746,6 +754,18 @@ export function createFiberFromCache(
|
||||
return fiber;
|
||||
}
|
||||
|
||||
export function createFiberFromTracingMarker(
|
||||
pendingProps: any,
|
||||
mode: TypeOfMode,
|
||||
lanes: Lanes,
|
||||
key: null | string,
|
||||
) {
|
||||
const fiber = createFiber(TracingMarkerComponent, pendingProps, key, mode);
|
||||
fiber.elementType = REACT_TRACING_MARKER_TYPE;
|
||||
fiber.lanes = lanes;
|
||||
return fiber;
|
||||
}
|
||||
|
||||
export function createFiberFromText(
|
||||
content: string,
|
||||
mode: TypeOfMode,
|
||||
|
||||
@@ -61,6 +61,7 @@ import {
|
||||
OffscreenComponent,
|
||||
LegacyHiddenComponent,
|
||||
CacheComponent,
|
||||
TracingMarkerComponent,
|
||||
} from './ReactWorkTags';
|
||||
import {
|
||||
NoFlags,
|
||||
@@ -93,6 +94,7 @@ import {
|
||||
enableSuspenseLayoutEffectSemantics,
|
||||
enableSchedulingProfiler,
|
||||
enablePersistentOffscreenHostContainer,
|
||||
enableTransitionTracing,
|
||||
} from 'shared/ReactFeatureFlags';
|
||||
import isArray from 'shared/isArray';
|
||||
import shallowEqual from 'shared/shallowEqual';
|
||||
@@ -898,6 +900,21 @@ function updateCacheComponent(
|
||||
return workInProgress.child;
|
||||
}
|
||||
|
||||
// This should only be called if the name changes
|
||||
function updateTracingMarkerComponent(
|
||||
current: Fiber | null,
|
||||
workInProgress: Fiber,
|
||||
renderLanes: Lanes,
|
||||
) {
|
||||
if (!enableTransitionTracing) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const nextChildren = workInProgress.pendingProps.children;
|
||||
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
||||
return workInProgress.child;
|
||||
}
|
||||
|
||||
function updateFragment(
|
||||
current: Fiber | null,
|
||||
workInProgress: Fiber,
|
||||
@@ -3900,6 +3917,16 @@ function beginWork(
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TracingMarkerComponent: {
|
||||
if (enableTransitionTracing) {
|
||||
return updateTracingMarkerComponent(
|
||||
current,
|
||||
workInProgress,
|
||||
renderLanes,
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
|
||||
@@ -61,6 +61,7 @@ import {
|
||||
OffscreenComponent,
|
||||
LegacyHiddenComponent,
|
||||
CacheComponent,
|
||||
TracingMarkerComponent,
|
||||
} from './ReactWorkTags';
|
||||
import {
|
||||
NoFlags,
|
||||
@@ -93,6 +94,7 @@ import {
|
||||
enableSuspenseLayoutEffectSemantics,
|
||||
enableSchedulingProfiler,
|
||||
enablePersistentOffscreenHostContainer,
|
||||
enableTransitionTracing,
|
||||
} from 'shared/ReactFeatureFlags';
|
||||
import isArray from 'shared/isArray';
|
||||
import shallowEqual from 'shared/shallowEqual';
|
||||
@@ -898,6 +900,21 @@ function updateCacheComponent(
|
||||
return workInProgress.child;
|
||||
}
|
||||
|
||||
// This should only be called if the name changes
|
||||
function updateTracingMarkerComponent(
|
||||
current: Fiber | null,
|
||||
workInProgress: Fiber,
|
||||
renderLanes: Lanes,
|
||||
) {
|
||||
if (!enableTransitionTracing) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const nextChildren = workInProgress.pendingProps.children;
|
||||
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
||||
return workInProgress.child;
|
||||
}
|
||||
|
||||
function updateFragment(
|
||||
current: Fiber | null,
|
||||
workInProgress: Fiber,
|
||||
@@ -3900,6 +3917,16 @@ function beginWork(
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TracingMarkerComponent: {
|
||||
if (enableTransitionTracing) {
|
||||
return updateTracingMarkerComponent(
|
||||
current,
|
||||
workInProgress,
|
||||
renderLanes,
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(
|
||||
|
||||
+3
-1
@@ -32,7 +32,8 @@ export type WorkTag =
|
||||
| 21
|
||||
| 22
|
||||
| 23
|
||||
| 24;
|
||||
| 24
|
||||
| 25;
|
||||
|
||||
export const FunctionComponent = 0;
|
||||
export const ClassComponent = 1;
|
||||
@@ -58,3 +59,4 @@ export const ScopeComponent = 21;
|
||||
export const OffscreenComponent = 22;
|
||||
export const LegacyHiddenComponent = 23;
|
||||
export const CacheComponent = 24;
|
||||
export const TracingMarkerComponent = 25;
|
||||
|
||||
@@ -34,6 +34,7 @@ import {
|
||||
OffscreenComponent,
|
||||
LegacyHiddenComponent,
|
||||
CacheComponent,
|
||||
TracingMarkerComponent,
|
||||
} from 'react-reconciler/src/ReactWorkTags';
|
||||
import getComponentNameFromType from 'shared/getComponentNameFromType';
|
||||
import {REACT_STRICT_MODE_TYPE} from 'shared/ReactSymbols';
|
||||
@@ -103,7 +104,8 @@ export default function getComponentNameFromFiber(fiber: Fiber): string | null {
|
||||
return 'Suspense';
|
||||
case SuspenseListComponent:
|
||||
return 'SuspenseList';
|
||||
|
||||
case TracingMarkerComponent:
|
||||
return 'TracingMarker';
|
||||
// The display name for this tags come from the user-provided type:
|
||||
case ClassComponent:
|
||||
case FunctionComponent:
|
||||
|
||||
@@ -58,6 +58,7 @@ export {
|
||||
unstable_LegacyHidden,
|
||||
unstable_Offscreen,
|
||||
unstable_Scope,
|
||||
unstable_TracingMarker,
|
||||
unstable_getCacheSignal,
|
||||
unstable_getCacheForType,
|
||||
unstable_useCacheRefresh,
|
||||
|
||||
@@ -19,6 +19,7 @@ import {
|
||||
REACT_OFFSCREEN_TYPE,
|
||||
REACT_SCOPE_TYPE,
|
||||
REACT_CACHE_TYPE,
|
||||
REACT_TRACING_MARKER_TYPE,
|
||||
} from 'shared/ReactSymbols';
|
||||
|
||||
import {Component, PureComponent} from './ReactBaseClasses';
|
||||
@@ -126,6 +127,8 @@ export {
|
||||
REACT_CACHE_TYPE as unstable_Cache,
|
||||
// enableScopeAPI
|
||||
REACT_SCOPE_TYPE as unstable_Scope,
|
||||
// enableTransitionTracing
|
||||
REACT_TRACING_MARKER_TYPE as unstable_TracingMarker,
|
||||
useId,
|
||||
act,
|
||||
};
|
||||
|
||||
@@ -30,6 +30,7 @@ export let REACT_DEBUG_TRACING_MODE_TYPE = 0xeae1;
|
||||
export let REACT_OFFSCREEN_TYPE = 0xeae2;
|
||||
export let REACT_LEGACY_HIDDEN_TYPE = 0xeae3;
|
||||
export let REACT_CACHE_TYPE = 0xeae4;
|
||||
export let REACT_TRACING_MARKER_TYPE = 0xeae5;
|
||||
|
||||
if (typeof Symbol === 'function' && Symbol.for) {
|
||||
const symbolFor = Symbol.for;
|
||||
@@ -50,6 +51,7 @@ if (typeof Symbol === 'function' && Symbol.for) {
|
||||
REACT_OFFSCREEN_TYPE = symbolFor('react.offscreen');
|
||||
REACT_LEGACY_HIDDEN_TYPE = symbolFor('react.legacy_hidden');
|
||||
REACT_CACHE_TYPE = symbolFor('react.cache');
|
||||
REACT_TRACING_MARKER_TYPE = symbolFor('react.tracing_marker');
|
||||
}
|
||||
|
||||
const MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
|
||||
|
||||
@@ -23,6 +23,7 @@ import {
|
||||
REACT_SUSPENSE_LIST_TYPE,
|
||||
REACT_LAZY_TYPE,
|
||||
REACT_CACHE_TYPE,
|
||||
REACT_TRACING_MARKER_TYPE,
|
||||
} from 'shared/ReactSymbols';
|
||||
|
||||
// Keep in sync with react-reconciler/getComponentNameFromFiber
|
||||
@@ -79,6 +80,8 @@ export default function getComponentNameFromType(type: mixed): string | null {
|
||||
return 'SuspenseList';
|
||||
case REACT_CACHE_TYPE:
|
||||
return 'Cache';
|
||||
case REACT_TRACING_MARKER_TYPE:
|
||||
return 'TracingMarker';
|
||||
}
|
||||
if (typeof type === 'object') {
|
||||
switch (type.$$typeof) {
|
||||
|
||||
@@ -23,8 +23,13 @@ import {
|
||||
REACT_LEGACY_HIDDEN_TYPE,
|
||||
REACT_OFFSCREEN_TYPE,
|
||||
REACT_CACHE_TYPE,
|
||||
REACT_TRACING_MARKER_TYPE,
|
||||
} from 'shared/ReactSymbols';
|
||||
import {enableScopeAPI, enableCache} from './ReactFeatureFlags';
|
||||
import {
|
||||
enableScopeAPI,
|
||||
enableCache,
|
||||
enableTransitionTracing,
|
||||
} from './ReactFeatureFlags';
|
||||
|
||||
let REACT_MODULE_REFERENCE: number | Symbol = 0;
|
||||
if (typeof Symbol === 'function') {
|
||||
@@ -47,7 +52,8 @@ export default function isValidElementType(type: mixed) {
|
||||
type === REACT_LEGACY_HIDDEN_TYPE ||
|
||||
type === REACT_OFFSCREEN_TYPE ||
|
||||
(enableScopeAPI && type === REACT_SCOPE_TYPE) ||
|
||||
(enableCache && type === REACT_CACHE_TYPE)
|
||||
(enableCache && type === REACT_CACHE_TYPE) ||
|
||||
(enableTransitionTracing && type === REACT_TRACING_MARKER_TYPE)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user