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