Home / Function/ describeNode() — react Function Reference

describeNode() — react Function Reference

Architecture documentation for the describeNode() function in ReactFiberHydrationDiffs.js from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  2bddd835_c8df_0f88_d323_52a3495a4bd7["describeNode()"]
  e98a87b8_beb4_9d09_4d2f_78427872f8a3["ReactFiberHydrationDiffs.js"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|defined in| e98a87b8_beb4_9d09_4d2f_78427872f8a3
  fdd4154a_3f30_1e00_766c_6534484f3d00["describeDiff()"]
  fdd4154a_3f30_1e00_766c_6534484f3d00 -->|calls| 2bddd835_c8df_0f88_d323_52a3495a4bd7
  99183d88_9741_f0c1_abe0_2b82ac411cdb["findNotableNode()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 99183d88_9741_f0c1_abe0_2b82ac411cdb
  f6f0b608_1ccd_4a42_4233_3a05bae25abb["indentation()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| f6f0b608_1ccd_4a42_4233_3a05bae25abb
  132028dc_e4a7_d8d0_d21d_ea93b0f61c4e["describeTextDiff()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 132028dc_e4a7_d8d0_d21d_ea93b0f61c4e
  4493f114_0da7_6863_a117_d82daa52e178["describeFiberType()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 4493f114_0da7_6863_a117_d82daa52e178
  60bd8b8e_9507_3645_9ea4_9eb42bba5086["describeCollapsedElement()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 60bd8b8e_9507_3645_9ea4_9eb42bba5086
  2747bd4b_fdc4_9488_e109_97887feb56e9["describeExpandedElement()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 2747bd4b_fdc4_9488_e109_97887feb56e9
  b3d78aa7_1781_59b0_4f7d_e52469a3f073["added()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| b3d78aa7_1781_59b0_4f7d_e52469a3f073
  d76433b3_24cb_a703_296a_c8c399817ef2["describeElementDiff()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| d76433b3_24cb_a703_296a_c8c399817ef2
  c3fa4286_ed9c_bf31_cd26_31f970d0de2f["describeSiblingFiber()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| c3fa4286_ed9c_bf31_cd26_31f970d0de2f
  5b17efcd_e1a7_5c9c_cdf5_fbe254307fa5["removed()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 5b17efcd_e1a7_5c9c_cdf5_fbe254307fa5
  6474ef9f_4744_bb9a_3aba_8b5a81bd364e["describeTextNode()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| 6474ef9f_4744_bb9a_3aba_8b5a81bd364e
  style 2bddd835_c8df_0f88_d323_52a3495a4bd7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/react-reconciler/src/ReactFiberHydrationDiffs.js lines 537–648

function describeNode(node: HydrationDiffNode, indent: number): string {
  const skipToNode = findNotableNode(node, indent);
  if (
    skipToNode !== node &&
    (node.children.length !== 1 || node.children[0] !== skipToNode)
  ) {
    return indentation(indent) + '...\n' + describeNode(skipToNode, indent + 1);
  }

  // Prefix with any server components for context
  let parentContent = '';
  const debugInfo = node.fiber._debugInfo;
  if (debugInfo) {
    for (let i = 0; i < debugInfo.length; i++) {
      const serverComponentName = debugInfo[i].name;
      if (typeof serverComponentName === 'string') {
        parentContent +=
          indentation(indent) + '<' + serverComponentName + '>' + '\n';
        indent++;
      }
    }
  }

  // Self
  let selfContent = '';

  // We use the pending props since we might be generating a diff before the complete phase
  // when something throws.
  const clientProps = node.fiber.pendingProps;

  if (node.fiber.tag === HostText) {
    // Text Node
    selfContent = describeTextDiff(clientProps, node.serverProps, indent);
    indent++;
  } else {
    const type = describeFiberType(node.fiber);
    if (type !== null) {
      // Element Node
      if (node.serverProps === undefined) {
        // Just a reference node for context.
        selfContent = describeCollapsedElement(type, clientProps, indent);
        indent++;
      } else if (node.serverProps === null) {
        selfContent = describeExpandedElement(type, clientProps, added(indent));
        indent++;
      } else if (typeof node.serverProps === 'string') {
        if (__DEV__) {
          console.error(
            'Should not have matched a non HostText fiber to a Text node. This is a bug in React.',
          );
        }
      } else {
        selfContent = describeElementDiff(
          type,
          clientProps,
          node.serverProps,
          indent,
        );
        indent++;
      }
    }
  }

  // Compute children
  let childContent = '';
  let childFiber = node.fiber.child;
  let diffIdx = 0;
  while (childFiber && diffIdx < node.children.length) {
    const childNode = node.children[diffIdx];
    if (childNode.fiber === childFiber) {
      // This was a match in the diff.
      childContent += describeNode(childNode, indent);
      diffIdx++;
    } else {
      // This is an unrelated previous sibling.
      childContent += describeSiblingFiber(childFiber, indent);
    }
    childFiber = childFiber.sibling;
  }

  if (childFiber && node.children.length > 0) {

Domain

Subdomains

Called By

Frequently Asked Questions

What does describeNode() do?
describeNode() is a function in the react codebase, defined in packages/react-reconciler/src/ReactFiberHydrationDiffs.js.
Where is describeNode() defined?
describeNode() is defined in packages/react-reconciler/src/ReactFiberHydrationDiffs.js at line 537.
What does describeNode() call?
describeNode() calls 11 function(s): added, describeCollapsedElement, describeElementDiff, describeExpandedElement, describeFiberType, describeSiblingFiber, describeTextDiff, describeTextNode, and 3 more.
What calls describeNode()?
describeNode() is called by 1 function(s): describeDiff.

Analyze Your Own Codebase

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

Try Supermodel Free