mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
A long standing issue for React has been that if you reorder stateful nodes, they may lose their state and reload. The thing moving loses its state. There's no way to solve this in general where two stateful nodes swap. The [`moveBefore()` proposal](https://chromestatus.com/feature/5135990159835136?gate=5177450351558656) has now moved to [intent-to-ship](https://groups.google.com/a/chromium.org/g/blink-dev/c/YE_xLH6MkRs/m/_7CD0NYMAAAJ). This function is kind of like `insertBefore` but preserves state. There's [a demo here](https://state-preserving-atomic-move.glitch.me/). Ideally we'd port this demo to a fixture so we can try it. Currently this flag is always off - even in experimental. That's because this is still behind a Chrome flag so it's a little early to turn it on even in experimental. So you need a custom build. It's on in RN but only because it doesn't apply there which makes it easier to tell that it's safe to ship once it's on everywhere else. The other reason it's still off is because there's currently a semantic breaking change. `moveBefore()` errors if both nodes are disconnected. That happens if we're inside a completely disconnected React root. That's not usually how you should use React because it means effects can't read layout etc. However, it is currently supported. To handle this we'd have to try/catch the `moveBefore` to handle this case but we hope this semantic will change before it ships. Before we turn this on in experimental we either have to wait for the implementation to not error in the disconnected-disconnected case in Chrome or we'd have to add try/catch.
129 lines
4.1 KiB
JavaScript
129 lines
4.1 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow
|
|
*/
|
|
|
|
import typeof * as FeatureFlagsType from 'shared/ReactFeatureFlags';
|
|
import typeof * as ExportsType from './ReactFeatureFlags.www';
|
|
import typeof * as DynamicFeatureFlags from './ReactFeatureFlags.www-dynamic';
|
|
|
|
// Re-export dynamic flags from the www version.
|
|
const dynamicFeatureFlags: DynamicFeatureFlags = require('ReactFeatureFlags');
|
|
|
|
export const {
|
|
alwaysThrottleRetries,
|
|
disableDefaultPropsExceptForClasses,
|
|
disableLegacyContextForFunctionComponents,
|
|
disableSchedulerTimeoutInWorkLoop,
|
|
enableDebugTracing,
|
|
enableDeferRootSchedulingToMicrotask,
|
|
enableDO_NOT_USE_disableStrictPassiveEffect,
|
|
enableHiddenSubtreeInsertionEffectCleanup,
|
|
enableInfiniteRenderLoopDetection,
|
|
enableNoCloningMemoCache,
|
|
enableObjectFiber,
|
|
enableRenderableContext,
|
|
enableRetryLaneExpiration,
|
|
enableSiblingPrerendering,
|
|
enableTransitionTracing,
|
|
enableTrustedTypesIntegration,
|
|
enableUseResourceEffectHook,
|
|
favorSafetyOverHydrationPerf,
|
|
renameElementSymbol,
|
|
retryLaneExpirationMs,
|
|
syncLaneExpirationMs,
|
|
transitionLaneExpirationMs,
|
|
} = dynamicFeatureFlags;
|
|
|
|
// On WWW, __EXPERIMENTAL__ is used for a new modern build.
|
|
// It's not used anywhere in production yet.
|
|
|
|
export const debugRenderPhaseSideEffectsForStrictMode = __DEV__;
|
|
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;
|
|
|
|
export const disableIEWorkarounds = true;
|
|
export const enableCPUSuspense = true;
|
|
export const enableUseMemoCacheHook = true;
|
|
export const enableUseEffectEventHook = true;
|
|
export const enableFilterEmptyStringAttributesDOM = true;
|
|
export const enableMoveBefore = false;
|
|
export const enableAsyncActions = true;
|
|
export const disableInputAttributeSyncing = false;
|
|
export const enableLegacyFBSupport = true;
|
|
export const enableLazyContextPropagation = true;
|
|
|
|
export const enableComponentPerformanceTrack = false;
|
|
|
|
// Logs additional User Timing API marks for use with an experimental profiling tool.
|
|
export const enableSchedulingProfiler: boolean =
|
|
__PROFILE__ && dynamicFeatureFlags.enableSchedulingProfiler;
|
|
|
|
export const disableLegacyContext = __EXPERIMENTAL__;
|
|
export const enableGetInspectorDataForInstanceInProduction = false;
|
|
|
|
export const enableCache = true;
|
|
export const enableLegacyCache = true;
|
|
|
|
export const enableBinaryFlight = true;
|
|
export const enableFlightReadableStream = true;
|
|
export const enableAsyncIterableChildren = false;
|
|
|
|
export const enableTaint = false;
|
|
|
|
export const enablePostpone = false;
|
|
|
|
export const enableHalt = false;
|
|
|
|
export const enableContextProfiling = true;
|
|
|
|
// TODO: www currently relies on this feature. It's disabled in open source.
|
|
// Need to remove it.
|
|
export const disableCommentsAsDOMContainers = false;
|
|
|
|
export const enableCreateEventHandleAPI = true;
|
|
|
|
export const enableScopeAPI = true;
|
|
|
|
export const enableSuspenseCallback = true;
|
|
|
|
export const enableLegacyHidden = true;
|
|
|
|
export const enableComponentStackLocations = true;
|
|
|
|
export const disableTextareaChildren = __EXPERIMENTAL__;
|
|
|
|
export const consoleManagedByDevToolsDuringStrictMode = true;
|
|
|
|
export const enableFizzExternalRuntime = true;
|
|
|
|
export const passChildrenWhenCloningPersistedNodes = false;
|
|
|
|
export const enablePersistedModeClonedFlag = false;
|
|
|
|
export const enableAsyncDebugInfo = false;
|
|
export const disableClientCache = true;
|
|
|
|
export const enableServerComponentLogs = true;
|
|
|
|
export const enableReactTestRendererWarning = false;
|
|
export const useModernStrictMode = true;
|
|
|
|
export const disableLegacyMode = true;
|
|
|
|
export const enableOwnerStacks = false;
|
|
export const enableShallowPropDiffing = false;
|
|
|
|
// Flow magic to verify the exports of this file match the original version.
|
|
((((null: any): ExportsType): FeatureFlagsType): ExportsType);
|