Home / Function/ describeElementDiff() — react Function Reference

describeElementDiff() — react Function Reference

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

Entity Profile

Dependency Diagram

graph TD
  d76433b3_24cb_a703_296a_c8c399817ef2["describeElementDiff()"]
  e98a87b8_beb4_9d09_4d2f_78427872f8a3["ReactFiberHydrationDiffs.js"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|defined in| e98a87b8_beb4_9d09_4d2f_78427872f8a3
  2bddd835_c8df_0f88_d323_52a3495a4bd7["describeNode()"]
  2bddd835_c8df_0f88_d323_52a3495a4bd7 -->|calls| d76433b3_24cb_a703_296a_c8c399817ef2
  2747bd4b_fdc4_9488_e109_97887feb56e9["describeExpandedElement()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| 2747bd4b_fdc4_9488_e109_97887feb56e9
  f6f0b608_1ccd_4a42_4233_3a05bae25abb["indentation()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| f6f0b608_1ccd_4a42_4233_3a05bae25abb
  f70bda65_503f_5299_be1d_ced97c87a0f6["describePropValue()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| f70bda65_503f_5299_be1d_ced97c87a0f6
  b00fba94_63af_affe_dc43_a6e15740cbd3["objectName()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| b00fba94_63af_affe_dc43_a6e15740cbd3
  eecf080f_b1bf_30f4_07ee_7885ab3bb177["describePropertiesDiff()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| eecf080f_b1bf_30f4_07ee_7885ab3bb177
  b3d78aa7_1781_59b0_4f7d_e52469a3f073["added()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| b3d78aa7_1781_59b0_4f7d_e52469a3f073
  5b17efcd_e1a7_5c9c_cdf5_fbe254307fa5["removed()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| 5b17efcd_e1a7_5c9c_cdf5_fbe254307fa5
  132028dc_e4a7_d8d0_d21d_ea93b0f61c4e["describeTextDiff()"]
  d76433b3_24cb_a703_296a_c8c399817ef2 -->|calls| 132028dc_e4a7_d8d0_d21d_ea93b0f61c4e
  style d76433b3_24cb_a703_296a_c8c399817ef2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/react-reconciler/src/ReactFiberHydrationDiffs.js lines 377–519

function describeElementDiff(
  type: string,
  clientProps: {+[propName: string]: mixed},
  serverProps: {+[propName: string]: mixed},
  indent: number,
): string {
  let content = '';

  // Maps any previously unmatched lower case server prop name to its full prop name
  const serverPropNames: Map<string, string> = new Map();

  for (const propName in serverProps) {
    if (!serverProps.hasOwnProperty(propName)) {
      continue;
    }
    serverPropNames.set(propName.toLowerCase(), propName);
  }

  if (serverPropNames.size === 1 && serverPropNames.has('children')) {
    content += describeExpandedElement(type, clientProps, indentation(indent));
  } else {
    for (const propName in clientProps) {
      if (!clientProps.hasOwnProperty(propName)) {
        continue;
      }
      if (propName === 'children') {
        // Handled below.
        continue;
      }
      const maxLength = maxRowLength - (indent + 1) * 2 - propName.length - 1;
      const serverPropName = serverPropNames.get(propName.toLowerCase());
      if (serverPropName !== undefined) {
        serverPropNames.delete(propName.toLowerCase());
        // There's a diff here.
        const clientValue = clientProps[propName];
        const serverValue = serverProps[serverPropName];
        const clientPropValue = describePropValue(clientValue, maxLength);
        const serverPropValue = describePropValue(serverValue, maxLength);
        if (
          typeof clientValue === 'object' &&
          clientValue !== null &&
          typeof serverValue === 'object' &&
          serverValue !== null &&
          objectName(clientValue) === 'Object' &&
          objectName(serverValue) === 'Object' &&
          // Only do the diff if the object has a lot of keys or was shortened.
          (Object.keys(clientValue).length > 2 ||
            Object.keys(serverValue).length > 2 ||
            clientPropValue.indexOf('...') > -1 ||
            serverPropValue.indexOf('...') > -1)
        ) {
          // We're comparing two plain objects. We can diff the nested objects instead.
          content +=
            indentation(indent + 1) +
            propName +
            '={{\n' +
            describePropertiesDiff(clientValue, serverValue, indent + 2) +
            indentation(indent + 1) +
            '}}\n';
        } else {
          content +=
            added(indent + 1) + propName + '=' + clientPropValue + '\n';
          content +=
            removed(indent + 1) + propName + '=' + serverPropValue + '\n';
        }
      } else {
        // Considered equal.
        content +=
          indentation(indent + 1) +
          propName +
          '=' +
          describePropValue(clientProps[propName], maxLength) +
          '\n';
      }
    }

    serverPropNames.forEach(propName => {
      if (propName === 'children') {
        // Handled below.
        return;
      }

Domain

Subdomains

Called By

Frequently Asked Questions

What does describeElementDiff() do?
describeElementDiff() is a function in the react codebase, defined in packages/react-reconciler/src/ReactFiberHydrationDiffs.js.
Where is describeElementDiff() defined?
describeElementDiff() is defined in packages/react-reconciler/src/ReactFiberHydrationDiffs.js at line 377.
What does describeElementDiff() call?
describeElementDiff() calls 8 function(s): added, describeExpandedElement, describePropValue, describePropertiesDiff, describeTextDiff, indentation, objectName, removed.
What calls describeElementDiff()?
describeElementDiff() is called by 1 function(s): describeNode.

Analyze Your Own Codebase

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

Try Supermodel Free