Home / File/ ReactFiberHiddenContext.js — react Source File

ReactFiberHiddenContext.js — react Source File

Architecture documentation for ReactFiberHiddenContext.js, a javascript file in the react codebase. 4 imports, 5 dependents.

File javascript BabelCompiler Validation 4 imports 5 dependents 4 functions

Entity Profile

Dependency Diagram

graph LR
  a53113f8_99e9_4566_6c5f_d1534c5c4ca8["ReactFiberHiddenContext.js"]
  6b9f5caa_fb13_3d3c_2f60_ad3c4f58371f["ReactInternalTypes.js"]
  a53113f8_99e9_4566_6c5f_d1534c5c4ca8 --> 6b9f5caa_fb13_3d3c_2f60_ad3c4f58371f
  8f731ef5_fa4f_fcf5_0d94_a73afa35b6a4["ReactFiberStack.js"]
  a53113f8_99e9_4566_6c5f_d1534c5c4ca8 --> 8f731ef5_fa4f_fcf5_0d94_a73afa35b6a4
  768f6d67_77c1_be19_5596_a943eab59e05["ReactFiberLane.js"]
  a53113f8_99e9_4566_6c5f_d1534c5c4ca8 --> 768f6d67_77c1_be19_5596_a943eab59e05
  d73e9290_2d2e_5d3f_97dd_84929f205c77["ReactFiberWorkLoop.js"]
  a53113f8_99e9_4566_6c5f_d1534c5c4ca8 --> d73e9290_2d2e_5d3f_97dd_84929f205c77
  0be70812_cc0c_b210_f84f_8e61dd5f831c["ReactFiberBeginWork.js"]
  0be70812_cc0c_b210_f84f_8e61dd5f831c --> a53113f8_99e9_4566_6c5f_d1534c5c4ca8
  6b05669d_2f09_63a5_e79f_0afc195f25a3["ReactFiberCompleteWork.js"]
  6b05669d_2f09_63a5_e79f_0afc195f25a3 --> a53113f8_99e9_4566_6c5f_d1534c5c4ca8
  85d2c68c_7609_2c66_22fb_5f02e8a2e8fe["ReactFiberHooks.js"]
  85d2c68c_7609_2c66_22fb_5f02e8a2e8fe --> a53113f8_99e9_4566_6c5f_d1534c5c4ca8
  be9c7dd4_0030_1768_3ad3_f5acdbd08eef["ReactFiberSuspenseContext.js"]
  be9c7dd4_0030_1768_3ad3_f5acdbd08eef --> a53113f8_99e9_4566_6c5f_d1534c5c4ca8
  53e7e9e3_9e8c_648e_1f4e_0fdfa5c5cb8f["ReactFiberUnwindWork.js"]
  53e7e9e3_9e8c_648e_1f4e_0fdfa5c5cb8f --> a53113f8_99e9_4566_6c5f_d1534c5c4ca8
  style a53113f8_99e9_4566_6c5f_d1534c5c4ca8 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

/**
 * 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 type {Fiber} from './ReactInternalTypes';
import type {StackCursor} from './ReactFiberStack';
import type {Lanes} from './ReactFiberLane';

import {createCursor, push, pop} from './ReactFiberStack';

import {
  getEntangledRenderLanes,
  setEntangledRenderLanes,
} from './ReactFiberWorkLoop';
import {NoLanes, mergeLanes} from './ReactFiberLane';

// TODO: Remove `renderLanes` context in favor of hidden context
type HiddenContext = {
  // Represents the lanes that must be included when processing updates in
  // order to reveal the hidden content.
  // TODO: Remove `subtreeLanes` context from work loop in favor of this one.
  baseLanes: number,
  ...
};

// TODO: This isn't being used yet, but it's intended to replace the
// InvisibleParentContext that is currently managed by SuspenseContext.
export const currentTreeHiddenStackCursor: StackCursor<HiddenContext | null> =
  createCursor(null);
export const prevEntangledRenderLanesCursor: StackCursor<Lanes> =
  createCursor(NoLanes);

export function pushHiddenContext(fiber: Fiber, context: HiddenContext): void {
  const prevEntangledRenderLanes = getEntangledRenderLanes();
  push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber);
  push(currentTreeHiddenStackCursor, context, fiber);

  // When rendering a subtree that's currently hidden, we must include all
  // lanes that would have rendered if the hidden subtree hadn't been deferred.
  // That is, in order to reveal content from hidden -> visible, we must commit
  // all the updates that we skipped when we originally hid the tree.
  setEntangledRenderLanes(
    mergeLanes(prevEntangledRenderLanes, context.baseLanes),
  );
}

export function reuseHiddenContextOnStack(fiber: Fiber): void {
  // This subtree is not currently hidden, so we don't need to add any lanes
  // to the render lanes. But we still need to push something to avoid a
  // context mismatch. Reuse the existing context on the stack.
  push(prevEntangledRenderLanesCursor, getEntangledRenderLanes(), fiber);
  push(
    currentTreeHiddenStackCursor,
    currentTreeHiddenStackCursor.current,
    fiber,
  );
}

export function popHiddenContext(fiber: Fiber): void {
  // Restore the previous render lanes from the stack
  setEntangledRenderLanes(prevEntangledRenderLanesCursor.current);

  pop(currentTreeHiddenStackCursor, fiber);
  pop(prevEntangledRenderLanesCursor, fiber);
}

export function isCurrentTreeHidden(): boolean {
  return currentTreeHiddenStackCursor.current !== null;
}

Domain

Subdomains

Frequently Asked Questions

What does ReactFiberHiddenContext.js do?
ReactFiberHiddenContext.js is a source file in the react codebase, written in javascript. It belongs to the BabelCompiler domain, Validation subdomain.
What functions are defined in ReactFiberHiddenContext.js?
ReactFiberHiddenContext.js defines 4 function(s): isCurrentTreeHidden, popHiddenContext, pushHiddenContext, reuseHiddenContextOnStack.
What does ReactFiberHiddenContext.js depend on?
ReactFiberHiddenContext.js imports 4 module(s): ReactFiberLane.js, ReactFiberStack.js, ReactFiberWorkLoop.js, ReactInternalTypes.js.
What files import ReactFiberHiddenContext.js?
ReactFiberHiddenContext.js is imported by 5 file(s): ReactFiberBeginWork.js, ReactFiberCompleteWork.js, ReactFiberHooks.js, ReactFiberSuspenseContext.js, ReactFiberUnwindWork.js.
Where is ReactFiberHiddenContext.js in the architecture?
ReactFiberHiddenContext.js is located at packages/react-reconciler/src/ReactFiberHiddenContext.js (domain: BabelCompiler, subdomain: Validation, directory: packages/react-reconciler/src).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free