diff --git a/packages/react-native-renderer/src/ReactFiberConfigFabric.js b/packages/react-native-renderer/src/ReactFiberConfigFabric.js index be64b37fef257..e2372e70f9607 100644 --- a/packages/react-native-renderer/src/ReactFiberConfigFabric.js +++ b/packages/react-native-renderer/src/ReactFiberConfigFabric.js @@ -48,7 +48,10 @@ const { unstable_getCurrentEventPriority: fabricGetCurrentEventPriority, } = nativeFabricUIManager; -import {passChildrenWhenCloningPersistedNodes} from 'shared/ReactFeatureFlags'; +import { + enableFabricCompleteRootInCommitPhase, + passChildrenWhenCloningPersistedNodes, +} from 'shared/ReactFeatureFlags'; const {get: getViewConfigForType} = ReactNativeViewConfigRegistry; @@ -469,7 +472,9 @@ export function finalizeContainerChildren( container: Container, newChildren: ChildSet, ): void { - completeRoot(container, newChildren); + if (!enableFabricCompleteRootInCommitPhase) { + completeRoot(container, newChildren); + } } export function replaceContainerChildren( @@ -477,6 +482,9 @@ export function replaceContainerChildren( newChildren: ChildSet, ): void { // Noop - children will be replaced in finalizeContainerChildren + if (enableFabricCompleteRootInCommitPhase) { + completeRoot(container, newChildren); + } } export function getInstanceFromNode(node: any): empty { diff --git a/packages/shared/ReactFeatureFlags.js b/packages/shared/ReactFeatureFlags.js index f74a181ab21dd..190f2b6b70335 100644 --- a/packages/shared/ReactFeatureFlags.js +++ b/packages/shared/ReactFeatureFlags.js @@ -87,6 +87,11 @@ export const enableTaint = __EXPERIMENTAL__; export const enablePostpone = __EXPERIMENTAL__; +/** + * Switches the Fabric API from doing layout in commit work instead of complete work. + */ +export const enableFabricCompleteRootInCommitPhase = false; + /** * Switches Fiber creation to a simple object instead of a constructor. */ diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js b/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js index a7016626c6691..c0a4cf9365a9a 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb-dynamic.js @@ -22,3 +22,4 @@ export const enableAddPropertiesFastPath = __VARIANT__; export const enableObjectFiber = __VARIANT__; export const enableShallowPropDiffing = __VARIANT__; export const passChildrenWhenCloningPersistedNodes = __VARIANT__; +export const enableFabricCompleteRootInCommitPhase = __VARIANT__; diff --git a/packages/shared/forks/ReactFeatureFlags.native-fb.js b/packages/shared/forks/ReactFeatureFlags.native-fb.js index 59c1a042fbfe4..ce963a909d2be 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.native-fb.js @@ -21,6 +21,7 @@ const dynamicFlags: DynamicExportsType = (dynamicFlagsUntyped: any); export const { alwaysThrottleRetries, enableAddPropertiesFastPath, + enableFabricCompleteRootInCommitPhase, enableObjectFiber, enableShallowPropDiffing, passChildrenWhenCloningPersistedNodes, diff --git a/packages/shared/forks/ReactFeatureFlags.native-oss.js b/packages/shared/forks/ReactFeatureFlags.native-oss.js index 0abb8ff65c9b0..9f9c3698d3d85 100644 --- a/packages/shared/forks/ReactFeatureFlags.native-oss.js +++ b/packages/shared/forks/ReactFeatureFlags.native-oss.js @@ -44,6 +44,7 @@ export const enableCreateEventHandleAPI = false; export const enableDebugTracing = false; export const enableDeferRootSchedulingToMicrotask = true; export const enableDO_NOT_USE_disableStrictPassiveEffect = false; +export const enableFabricCompleteRootInCommitPhase = false; export const enableFilterEmptyStringAttributesDOM = true; export const enableFizzExternalRuntime = true; export const enableFlightReadableStream = true; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.js index 47a138751bbdf..2a75c9ad20e2d 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.js @@ -44,6 +44,7 @@ export const enableComponentStackLocations = true; export const enableLegacyFBSupport = false; export const enableFilterEmptyStringAttributesDOM = true; export const enableGetInspectorDataForInstanceInProduction = false; +export const enableFabricCompleteRootInCommitPhase = false; export const enableRetryLaneExpiration = false; export const retryLaneExpirationMs = 5000; diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js index 99260d5d68d91..f20f0e16a17d3 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.native-fb.js @@ -78,6 +78,7 @@ export const retryLaneExpirationMs = 5000; export const syncLaneExpirationMs = 250; export const transitionLaneExpirationMs = 5000; export const useModernStrictMode = true; +export const enableFabricCompleteRootInCommitPhase = false; // Flow magic to verify the exports of this file match the original version. ((((null: any): ExportsType): FeatureFlagsType): ExportsType); diff --git a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js index 69b0ce5bd53d6..b77f040c24c23 100644 --- a/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js +++ b/packages/shared/forks/ReactFeatureFlags.test-renderer.www.js @@ -47,6 +47,7 @@ export const enableLegacyFBSupport = false; export const enableFilterEmptyStringAttributesDOM = true; export const enableGetInspectorDataForInstanceInProduction = false; export const enableRenderableContext = false; +export const enableFabricCompleteRootInCommitPhase = false; export const enableRetryLaneExpiration = false; export const retryLaneExpirationMs = 5000; diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index 54ead6657e036..125d3c9c0e767 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -46,6 +46,7 @@ export const enableProfilerTimer = __PROFILE__; export const enableProfilerCommitHooks = __PROFILE__; export const enableProfilerNestedUpdatePhase = __PROFILE__; export const enableUpdaterTracking = __PROFILE__; +export const enableFabricCompleteRootInCommitPhase = false; export const enableSuspenseAvoidThisFallback = true; export const enableSuspenseAvoidThisFallbackFizz = false;