1603
// This is a non-destructive form of rendering a node. If it suspends it spawns
1604
// a new task and restores the context of this task to what it was before.
1605
function renderNode(request: Request, task: Task, node: ReactNodeList): void {
1606
- // TODO: Store segment.children.length here and reset it in case something
1606
+ // Store how much we've pushed at this point so we can reset it in case something
1607
// suspended partially through writing something.
1608
+ const segment = task.blockedSegment;
1609
+ const childrenLength = segment.children.length;
1610
+ const chunkLength = segment.chunks.length;
1611
1612
// Snapshot the current context in case something throws to interrupt the
1613
// process.
1623
} catch (thrownValue) {
1624
resetHooksState();
1625
1626
+ // Reset the write pointers to where we started.
1627
+ segment.children.length = childrenLength;
1628
+ segment.chunks.length = chunkLength;
1629
+
1630
const x =
1631
thrownValue === SuspenseException
1632
? // This is a special type of exception used for Suspense. For historical
1902
prevTaskInDEV = currentTaskInDEV;
1903
currentTaskInDEV = task;
1904
}
1905
+
1906
+ const childrenLength = segment.children.length;
1907
+ const chunkLength = segment.chunks.length;
1908
try {
1909
// We call the destructive form that mutates this task. That way if something
1910
// suspends again, we can reuse the same task instead of spawning a new one.
1929
} catch (thrownValue) {
1930
resetHooksState();
1931
1932
+ // Reset the write pointers to where we started.
1933
+ segment.children.length = childrenLength;
1934
+ segment.chunks.length = chunkLength;
1935
+
1936
const x =
1937
thrownValue === SuspenseException
1938
? // This is a special type of exception used for Suspense. For historical