跳到主要内容

React 功能标志

Land 或移除(零努力)

很可能可以删除或 Land 且不会有后果的标志

// -----------------------------------------------------------------------------
// Land or remove (zero effort)
// 着陆或移除(零努力)
//
// Flags that can likely be deleted or landed without consequences
// 很可能可以删除或着陆且不会有后果的标志
// -----------------------------------------------------------------------------

// None
// 无

// -----------------------------------------------------------------------------
// Killswitch
// 紧急开关
//
// Flags that exist solely to turn off a change in case it causes a regression
// when it rolls out to prod. We should remove these as soon as possible.
// 仅存在于关闭某个更改以防止在上线生产环境时引发回归的标志,我们应尽快删除这些标志。
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Land or remove (moderate effort)
// Land 或移除(中等努力)
//
// Flags that can be probably deleted or landed, but might require extra effort
// like migrating internal callers or performance testing.
// 可能可以删除或合并的标志,但可能需要额外的工作,比如迁移内部调用者或性能测试。
// -----------------------------------------------------------------------------

// Need to remove didTimeout argument from Scheduler before landing
// 在合并前需要从调度器中移除 didTimeout 参数
export const disableSchedulerTimeoutInWorkLoop: boolean = false;

// -----------------------------------------------------------------------------
// Slated for removal in the future (significant effort)
// 未来计划移除(需要大量工作)
//
// These are experiments that didn't work out, and never shipped, but we can't
// delete from the codebase until we migrate internal callers.
// 这些是没有成功的实验,从未发布过,但在迁移内部调用者之前,我们不能从代码库中删除。
// -----------------------------------------------------------------------------

// Add a callback property to suspense to notify which promises are currently
// in the update queue. This allows reporting and tracing of what is causing
// the user to see a loading state.
//
// 为 suspense 添加回调属性,以通知当前哪些 promise 在更新队列中。这允许报告和追踪导致用户
// 看到加载状态的原因。
//
// Also allows hydration callbacks to fire when a dehydrated boundary gets
// hydrated or deleted.
// 还允许在脱水边界被重新水化或删除时触发水化回调。
//
// This will eventually be replaced by the Transition Tracing proposal.
// 这最终将被过渡追踪提案取代。
export const enableSuspenseCallback: boolean = false;

// Experimental Scope support.
// 实验性 Scope 支持。
export const enableScopeAPI: boolean = false;

// Experimental Create Event Handle API.
// 实验性创建事件处理 API。
export const enableCreateEventHandleAPI: boolean = false;

// Support legacy Primer support on internal FB www
// 在内部 FB www 上支持旧版 Primer
export const enableLegacyFBSupport: boolean = false;

// -----------------------------------------------------------------------------
// Ongoing experiments
// 正在进行的实验
//
// These are features that we're either actively exploring or are reasonably
// likely to include in an upcoming release.
// 这些功能是我们正在积极探索的,或者很可能会在即将发布的版本中包含的。
// -----------------------------------------------------------------------------

// Yield to the browser event loop and not just the scheduler event loop before passive effects.
// Fix gated tests that fail with this flag enabled before turning it back on.
//
// 在被动副作用之前,让位于浏览器事件循环,而不仅仅是调度器事件循环。在重新启用此标志之前,修复启用该标志时失败的
// 受控测试。
export const enableYieldingBeforePassive: boolean = false;

// Experiment to intentionally yield less to block high framerate animations.
// 实验故意减少响应以阻止高帧率动画。
export const enableThrottledScheduling: boolean = false;

export const enableLegacyCache = __EXPERIMENTAL__;

export const enableAsyncIterableChildren = __EXPERIMENTAL__;

export const enableTaint = __EXPERIMENTAL__;

export const enableHalt: boolean = true;

export const enableViewTransition: boolean = true;

export const enableViewTransitionForPersistenceMode: boolean = false;

export const enableGestureTransition = __EXPERIMENTAL__;

export const enableScrollEndPolyfill = __EXPERIMENTAL__;

export const enableSuspenseyImages: boolean = false;

export const enableFizzBlockingRender = __EXPERIMENTAL__; // rel="expect"

export const enableSrcObject = __EXPERIMENTAL__;

export const enableHydrationChangeEvent = __EXPERIMENTAL__;

export const enableDefaultTransitionIndicator = __EXPERIMENTAL__;

export const enableOptimisticKey = __EXPERIMENTAL__;

/**
* Switches Fiber creation to a simple object instead of a constructor.
* 将 Fiber 创建切换为简单对象,而不是构造函数。
*/
export const enableObjectFiber: boolean = false;

export const enableTransitionTracing: boolean = false;

// FB-only usage. The new API has different semantics.
// 仅限 FB 使用。新 API 的语义不同。
export const enableLegacyHidden: boolean = false;

// Enables unstable_avoidThisFallback feature in Fiber
// 在 Fiber 中启用 unstable_avoidThisFallback 功能
export const enableSuspenseAvoidThisFallback: boolean = false;

export const enableCPUSuspense = __EXPERIMENTAL__;

// Test this at Meta before enabling.
// 在启用之前先在 Meta 上测试。
export const enableNoCloningMemoCache: boolean = false;

// Test in www before enabling in open source.
// Enables DOM-server to stream its instruction set as data-attributes
// (handled with an MutationObserver) instead of inline-scripts
//
// 在开放源代码中启用之前,先在 www 中测试。允许 DOM 服务端渲染将其指令集作为数据属性进行
// 流传输(通过 MutationObserver 处理)而不是内联脚本
export const enableFizzExternalRuntime = __EXPERIMENTAL__;

export const alwaysThrottleRetries: boolean = true;

// Gate whether useEffectEvent uses the mutation phase (true) or before-mutation
// phase (false) for updating event function references.
// 决定 useEffectEvent 是在变更阶段 (true) 还是变更前阶段 (false) 更新事件函数引用
export const enableEffectEventMutationPhase: boolean = false;

export const passChildrenWhenCloningPersistedNodes: boolean = false;

export const enableEagerAlternateStateNodeCleanup: boolean = true;

/**
* Enables an expiration time for retry lanes to avoid starvation.
* 为重试通道启用过期时间以避免饥饿问题。
*/
export const enableRetryLaneExpiration: boolean = false;
export const retryLaneExpirationMs = 5000;
export const syncLaneExpirationMs = 250;
export const transitionLaneExpirationMs = 5000;

/**
* Enables a new error detection for infinite render loops from updates caused
* by setState or similar outside of the component owning the state.
*
* 启用一种新的错误检测,用于检测由 setState 或类似操作在不拥有该状态的组件外部引起的无限渲染
* 循环的更新。
*/
export const enableInfiniteRenderLoopDetection: boolean = false;

export const enableFragmentRefs: boolean = true;
export const enableFragmentRefsScrollIntoView: boolean = true;
export const enableFragmentRefsInstanceHandles: boolean = true;
export const enableFragmentRefsTextNodes: boolean = true;

export const enableInternalInstanceMap: boolean = false;

// -----------------------------------------------------------------------------
// Ready for next major.
//
// Alias __NEXT_MAJOR__ to __EXPERIMENTAL__ for easier skimming.
// 将 __NEXT_MAJOR__ 别名为 __EXPERIMENTAL__ 以便更容易浏览。
// -----------------------------------------------------------------------------

// TODO: Anything that's set to `true` in this section should either be cleaned
// up (if it's on everywhere, including Meta and RN builds) or moved to a
// different section of this file.
// TODO: 在此部分设置为 `true` 的任何内容都应清理(如果它在所有地方都开启,包括 Meta 和 RN
// 构建),或者移动到此文件的不同部分。

// const __NEXT_MAJOR__ = __EXPERIMENTAL__;

/**
* Removes legacy style context defined using static `contextTypes` and consumed with static `childContextTypes`.
* 移除了使用静态 `contextTypes` 定义并通过静态 `childContextTypes` 使用的旧版样式上下文
*/
export const disableLegacyContext: boolean = true;
/**
* Removes legacy style context just from function components.
* 仅从函数组件中移除旧的样式上下文。
*/
export const disableLegacyContextForFunctionComponents: boolean = true;

// Enable the moveBefore() alternative to insertBefore(). This preserves states of moves.
// 启用 moveBefore() 替代 insertBefore()。这可以保留移动的状态。
export const enableMoveBefore: boolean = false;

// Disabled caching behavior of `react/cache` in client runtimes.
// 在客户端运行时禁用 `react/cache` 的缓存行为。
export const disableClientCache: boolean = true;

// Warn on any usage of ReactTestRenderer
// 对 ReactTestRenderer 的任何使用发出警告
export const enableReactTestRendererWarning: boolean = true;

// Disables legacy mode
// 禁用旧版模式
// This allows us to land breaking changes to remove legacy mode APIs in experimental builds
// before removing them in stable in the next Major
// 这允许在实验性版本中实施重大更改以移除旧版模式的 API 然后在下一个主版本的稳定版中移除它们
export const disableLegacyMode: boolean = true;

// -----------------------------------------------------------------------------
// Chopping Block
// 砧板
//
// Planned feature deprecations and breaking changes. Sorted roughly in order of
// when we plan to enable them.
// 计划中的功能弃用和重大更改。大致按我们计划启用的时间顺序排序。
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// React DOM Chopping Block
// React DOM 切割块
//
// Similar to main Chopping Block but only flags related to React DOM. These are
// grouped because we will likely batch all of them into a single major release.
// 类似于主要的 Chopping Block,但仅与 React DOM 相关的标志。它们被分组是因为我们可能会将所
// 有这些标志打包到一个主要版本中。
// -----------------------------------------------------------------------------

// Disable support for comment nodes as React DOM containers. Already disabled
// in open source, but www codebase still relies on it. Need to remove.
// 禁用将注释节点作为 React DOM 容器的支持。在开源中已经禁用,但 www 代码库仍然依赖它。需要移除。
export const disableCommentsAsDOMContainers: boolean = true;

export const enableTrustedTypesIntegration: boolean = true;

// Prevent the value and checked attributes from syncing with their related
// DOM properties
// 防止 value 和 checked 属性与其相关的 DOM 属性同步
export const disableInputAttributeSyncing: boolean = false;

// Disables children for <textarea> elements
// 禁用 <textarea> 元素的子元素
export const disableTextareaChildren: boolean = false;

// Disables children for <textarea> elements
// 禁用 <textarea> 元素的子元素
// +++ 这里注释应该是错误的: 启用并行过渡 +++
export const enableParallelTransitions: boolean = false;

// -----------------------------------------------------------------------------
// Debugging and DevTools
// 调试和开发工具
// -----------------------------------------------------------------------------

// Gather advanced timing metrics for Profiler subtrees.
// 收集 Profiler 子树的高级时间度量。
export const enableProfilerTimer = __PROFILE__;

// Adds performance.measure() marks using Chrome extensions to allow formatted
// Component rendering tracks to show up in the Performance tab.
// 使用 Chrome 扩展添加 performance.measure() 标记,以便在性能选项卡中显示格式化的组件渲染
// 跟踪。
// This flag will be used for both Server Component and Client Component tracks.
// 此标志将用于服务器组件和客户端组件跟踪。
// All calls should also be gated on enableProfilerTimer.
// 所有调用也应受 enableProfilerTimer 的控制。
export const enableComponentPerformanceTrack: boolean = true;

// Enables annotating of React performance track events with `performanceIssue`
// metadata, to more prominently highlight performance issues to users
// (initially, an experimental feature in React Native).
// 启用使用 `performanceIssue` 元数据对 React 性能跟踪事件进行注释,以更突出地向用户显示性
// 能问题(最初在 React Native 中作为实验性功能)。
export const enablePerformanceIssueReporting: boolean = false;

// Adds user timing marks for e.g. state updates, suspense, and work loop stuff,
// for an experimental timeline tool.
// 为用户时序标记添加,例如状态更新、Suspense 和工作循环相关的内容,用于实验性的时间线工具。
export const enableSchedulingProfiler: boolean =
!enableComponentPerformanceTrack && __PROFILE__;

// Record durations for commit and passive effects phases.
// 记录提交和被动效果阶段的持续时间。
export const enableProfilerCommitHooks = __PROFILE__;

// Phase param passed to onRender callback differentiates between an "update" and a "cascading-update".
// 传递给 onRender 回调的 phase 参数区分“更新”和“级联更新”。
export const enableProfilerNestedUpdatePhase = __PROFILE__;

export const enableAsyncDebugInfo: boolean = true;

// Track which Fiber(s) schedule render work.
// 跟踪哪些 Fiber 安排了渲染工作。
export const enableUpdaterTracking = __PROFILE__;

export const ownerStackLimit = 1e4;

export const eprh_enableUseKeyedStateCompilerLint: boolean = false;
export const eprh_enableVerboseNoSetStateInEffectCompilerLint: boolean = false;
export const eprh_enableExhaustiveEffectDependenciesCompilerLint:
| 'off'
| 'all'
| 'extra-only'
| 'missing-only' = 'off';