Skip to content

Commit 766245c

Browse files
committed
implement basic streaming for renderIntoContainer
1 parent b14d7fa commit 766245c

27 files changed

+1284
-109
lines changed

packages/react-dom-bindings/src/client/ReactDOMHostConfig.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import type {
1515
IntersectionObserverOptions,
1616
ObserveVisibleRectsCallback,
1717
} from 'react-reconciler/src/ReactTestSelectors';
18-
import type {ReactScopeInstance} from 'shared/ReactTypes';
18+
import type {ReactScopeInstance, Thenable} from 'shared/ReactTypes';
1919
import type {AncestorInfoDev} from './validateDOMNesting';
2020

2121
import {
@@ -1409,6 +1409,24 @@ export function errorHydratingContainer(parentContainer: Container): void {
14091409
}
14101410
}
14111411

1412+
export function getHydrationReadySignal(
1413+
container: Container,
1414+
): null | Thenable<mixed> {
1415+
const signal = (container: any)._r;
1416+
if (
1417+
signal !== null &&
1418+
typeof signal === 'object' &&
1419+
typeof signal.then === 'function'
1420+
) {
1421+
return signal;
1422+
}
1423+
return null;
1424+
}
1425+
1426+
export function clearHydrationReadySignal(container: Container) {
1427+
(container: any)._r = null;
1428+
}
1429+
14121430
// -------------------
14131431
// Test Selectors
14141432
// -------------------

packages/react-dom-bindings/src/server/ReactDOMServerExternalRuntime.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
clientRenderBoundary,
1212
completeBoundaryWithStyles,
1313
completeBoundary,
14+
completeContainer,
1415
completeSegment,
1516
} from './fizz-instruction-set/ReactDOMFizzInstructionSet';
1617

@@ -81,6 +82,7 @@ function handleNode(node_ /*: Node */) {
8182
// $FlowFixMe[incompatible-cast]
8283
const node = (node_ /*: HTMLElement*/);
8384
const dataset = node.dataset;
85+
let register = '';
8486
if (dataset['rxi'] != null) {
8587
clientRenderBoundary(
8688
dataset['bid'],
@@ -89,16 +91,21 @@ function handleNode(node_ /*: Node */) {
8991
dataset['stck'],
9092
);
9193
node.remove();
92-
} else if (dataset['rri'] != null) {
94+
} else if ((register = dataset['rri']) != null) {
9395
// Convert styles here, since its type is Array<Array<string>>
9496
completeBoundaryWithStyles(
97+
register === 'c',
9598
dataset['bid'],
9699
dataset['sid'],
97100
JSON.parse(dataset['sty']),
98101
);
99102
node.remove();
100-
} else if (dataset['rci'] != null) {
101-
completeBoundary(dataset['bid'], dataset['sid']);
103+
} else if ((register = dataset['rci']) != null) {
104+
if (register === 'c') {
105+
completeContainer(dataset['bid'], dataset['sid']);
106+
} else {
107+
completeBoundary(dataset['bid'], dataset['sid']);
108+
}
102109
node.remove();
103110
} else if (dataset['rsi'] != null) {
104111
completeSegment(dataset['sid'], dataset['pid']);

0 commit comments

Comments
 (0)