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
Calls
Called By
Source
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