Home / File/ ReactCurrentFiber.js — react Source File

ReactCurrentFiber.js — react Source File

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

File javascript BabelCompiler Validation 4 imports 12 dependents 5 functions

Entity Profile

Dependency Diagram

graph LR
  c115f947_44f7_8d77_0323_1e260644c151["ReactCurrentFiber.js"]
  6b9f5caa_fb13_3d3c_2f60_ad3c4f58371f["ReactInternalTypes.js"]
  c115f947_44f7_8d77_0323_1e260644c151 --> 6b9f5caa_fb13_3d3c_2f60_ad3c4f58371f
  7ae9fa3a_48d9_66c9_fa52_cf05d4024c2b["ReactFiberComponentStack.js"]
  c115f947_44f7_8d77_0323_1e260644c151 --> 7ae9fa3a_48d9_66c9_fa52_cf05d4024c2b
  1c5695a6_6806_ba54_2074_efc779e66da4["ReactSharedInternals"]
  c115f947_44f7_8d77_0323_1e260644c151 --> 1c5695a6_6806_ba54_2074_efc779e66da4
  6f207e69_195c_8592_d157_684fe7967d1f["getComponentNameFromFiber"]
  c115f947_44f7_8d77_0323_1e260644c151 --> 6f207e69_195c_8592_d157_684fe7967d1f
  8a694f3e_c887_fb18_4515_e3e4488bb43e["ReactChildFiber.js"]
  8a694f3e_c887_fb18_4515_e3e4488bb43e --> c115f947_44f7_8d77_0323_1e260644c151
  d204555d_8af7_71f6_c18b_ea6503e178bf["ReactFiberAsyncDispatcher.js"]
  d204555d_8af7_71f6_c18b_ea6503e178bf --> c115f947_44f7_8d77_0323_1e260644c151
  0be70812_cc0c_b210_f84f_8e61dd5f831c["ReactFiberBeginWork.js"]
  0be70812_cc0c_b210_f84f_8e61dd5f831c --> c115f947_44f7_8d77_0323_1e260644c151
  270d2932_6cca_c1c4_3f30_496c0c886bb5["ReactFiberCallUserSpace.js"]
  270d2932_6cca_c1c4_3f30_496c0c886bb5 --> c115f947_44f7_8d77_0323_1e260644c151
  8f5342bb_933e_6410_b584_cc120047394a["ReactFiberCommitEffects.js"]
  8f5342bb_933e_6410_b584_cc120047394a --> c115f947_44f7_8d77_0323_1e260644c151
  d39520cc_fe89_c0bc_424d_91bccdb79a69["ReactFiberCommitHostEffects.js"]
  d39520cc_fe89_c0bc_424d_91bccdb79a69 --> c115f947_44f7_8d77_0323_1e260644c151
  5239264d_5f7a_afd8_70d1_f52aaabff11f["ReactFiberDuplicateViewTransitions.js"]
  5239264d_5f7a_afd8_70d1_f52aaabff11f --> c115f947_44f7_8d77_0323_1e260644c151
  4bc7109f_638d_d9f7_bf47_6ec55b2fa128["ReactFiberHydrationContext.js"]
  4bc7109f_638d_d9f7_bf47_6ec55b2fa128 --> c115f947_44f7_8d77_0323_1e260644c151
  3ff8c5da_88d9_c61b_6bdc_da766a43fd30["ReactFiberReconciler.js"]
  3ff8c5da_88d9_c61b_6bdc_da766a43fd30 --> c115f947_44f7_8d77_0323_1e260644c151
  2945bdb1_d075_d792_a028_13eee518c9d4["ReactFiberThrow.js"]
  2945bdb1_d075_d792_a028_13eee518c9d4 --> c115f947_44f7_8d77_0323_1e260644c151
  style c115f947_44f7_8d77_0323_1e260644c151 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 ReactSharedInternals from 'shared/ReactSharedInternals';
import {getOwnerStackByFiberInDev} from './ReactFiberComponentStack';
import {getComponentNameFromOwner} from 'react-reconciler/src/getComponentNameFromFiber';

export let current: Fiber | null = null;
export let isRendering: boolean = false;

export function getCurrentFiberOwnerNameInDevOrNull(): string | null {
  if (__DEV__) {
    if (current === null) {
      return null;
    }
    const owner = current._debugOwner;
    if (owner != null) {
      return getComponentNameFromOwner(owner);
    }
  }
  return null;
}

function getCurrentFiberStackInDev(): string {
  if (__DEV__) {
    if (current === null) {
      return '';
    }
    // Safe because if current fiber exists, we are reconciling,
    // and it is guaranteed to be the work-in-progress version.
    // TODO: The above comment is not actually true. We might be
    // in a commit phase or preemptive set state callback.
    return getOwnerStackByFiberInDev(current);
  }
  return '';
}

export function runWithFiberInDEV<A0, A1, A2, A3, A4, T>(
  fiber: null | Fiber,
  callback: (A0, A1, A2, A3, A4) => T,
  arg0: A0,
  arg1: A1,
  arg2: A2,
  arg3: A3,
  arg4: A4,
): T {
  if (__DEV__) {
    const previousFiber = current;
    setCurrentFiber(fiber);
    try {
      if (fiber !== null && fiber._debugTask) {
        return fiber._debugTask.run(
          callback.bind(null, arg0, arg1, arg2, arg3, arg4),
        );
      }
      return callback(arg0, arg1, arg2, arg3, arg4);
    } finally {
      setCurrentFiber(previousFiber);
    }
  }
  // These errors should never make it into a build so we don't need to encode them in codes.json
  // eslint-disable-next-line react-internal/prod-error-codes
  throw new Error(
    'runWithFiberInDEV should never be called in production. This is a bug in React.',
  );
}

export function resetCurrentFiber() {
  if (__DEV__) {
    ReactSharedInternals.getCurrentStack = null;
    isRendering = false;
  }
  current = null;
}

export function setCurrentFiber(fiber: Fiber | null) {
  if (__DEV__) {
    ReactSharedInternals.getCurrentStack =
      fiber === null ? null : getCurrentFiberStackInDev;
    isRendering = false;
  }
  current = fiber;
}

export function setIsRendering(rendering: boolean) {
  if (__DEV__) {
    isRendering = rendering;
  }
}

export function getIsRendering(): void | boolean {
  if (__DEV__) {
    return isRendering;
  }
}

Domain

Subdomains

Dependencies

Frequently Asked Questions

What does ReactCurrentFiber.js do?
ReactCurrentFiber.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 ReactCurrentFiber.js?
ReactCurrentFiber.js defines 5 function(s): getCurrentFiberStackInDev, getIsRendering, resetCurrentFiber, setCurrentFiber, setIsRendering.
What does ReactCurrentFiber.js depend on?
ReactCurrentFiber.js imports 4 module(s): ReactFiberComponentStack.js, ReactInternalTypes.js, ReactSharedInternals, getComponentNameFromFiber.
What files import ReactCurrentFiber.js?
ReactCurrentFiber.js is imported by 12 file(s): ReactChildFiber.js, ReactFiberAsyncDispatcher.js, ReactFiberBeginWork.js, ReactFiberCallUserSpace.js, ReactFiberCommitEffects.js, ReactFiberCommitHostEffects.js, ReactFiberDuplicateViewTransitions.js, ReactFiberHydrationContext.js, and 4 more.
Where is ReactCurrentFiber.js in the architecture?
ReactCurrentFiber.js is located at packages/react-reconciler/src/ReactCurrentFiber.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