Skip to content

Commit d329ff9

Browse files
authoredApr 19, 2024··
Deprecate renderToStaticNodeStream (#28872)
This commit adds warnings indicating that `renderToStaticNodeStream` will be removed in an upcoming React release. This API has been legacy, is not widely used (renderToStaticMarkup is more common) and has semantically eqiuvalent implementations with renderToReadableStream and renderToPipeableStream.
1 parent 561c023 commit d329ff9

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed
 

‎packages/react-dom/src/__tests__/ReactServerRendering-test.js

+28-10
Original file line numberDiff line numberDiff line change
@@ -580,16 +580,28 @@ describe('ReactDOMServer', () => {
580580
describe('renderToStaticNodeStream', () => {
581581
it('should generate simple markup', () => {
582582
const SuccessfulElement = React.createElement(() => <img />);
583-
const response =
584-
ReactDOMServer.renderToStaticNodeStream(SuccessfulElement);
585-
expect(response.read().toString()).toMatch(new RegExp('<img' + '/>'));
583+
expect(() => {
584+
const response =
585+
ReactDOMServer.renderToStaticNodeStream(SuccessfulElement);
586+
expect(response.read().toString()).toMatch(new RegExp('<img' + '/>'));
587+
}).toErrorDev(
588+
'ReactDOMServer.renderToStaticNodeStream() is deprecated and will be removed in an upcomingrelease of React',
589+
{withoutStack: true},
590+
);
586591
});
587592

588593
it('should handle errors correctly', () => {
589594
const FailingElement = React.createElement(() => {
590595
throw new Error('An Error');
591596
});
592-
const response = ReactDOMServer.renderToStaticNodeStream(FailingElement);
597+
598+
let response;
599+
expect(() => {
600+
response = ReactDOMServer.renderToStaticNodeStream(FailingElement);
601+
}).toErrorDev(
602+
'ReactDOMServer.renderToStaticNodeStream() is deprecated and will be removed in an upcomingrelease of React',
603+
{withoutStack: true},
604+
);
593605
return new Promise(resolve => {
594606
response.once('error', () => {
595607
resolve();
@@ -614,12 +626,18 @@ describe('ReactDOMServer', () => {
614626
throw promise;
615627
}
616628

617-
const response = ReactDOMServer.renderToStaticNodeStream(
618-
<div>
619-
<React.Suspense fallback={'fallback'}>
620-
<Suspender />
621-
</React.Suspense>
622-
</div>,
629+
let response;
630+
expect(() => {
631+
response = ReactDOMServer.renderToStaticNodeStream(
632+
<div>
633+
<React.Suspense fallback={'fallback'}>
634+
<Suspender />
635+
</React.Suspense>
636+
</div>,
637+
);
638+
}).toErrorDev(
639+
'ReactDOMServer.renderToStaticNodeStream() is deprecated and will be removed in an upcomingrelease of React',
640+
{withoutStack: true},
623641
);
624642
await resolve();
625643
expect(response.read().toString()).toEqual('<div>resolved</div>');

‎packages/react-dom/src/server/ReactDOMLegacyServerNodeStream.js

+13
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,23 @@ function onError() {
5959
// Non-fatal errors are ignored.
6060
}
6161

62+
let didWarnAboutDeprecatedRenderToStaticNodeStream = false;
63+
6264
function renderToStaticNodeStream(
6365
children: ReactNodeList,
6466
options?: ServerOptions,
6567
): Readable {
68+
if (__DEV__) {
69+
if (!didWarnAboutDeprecatedRenderToStaticNodeStream) {
70+
didWarnAboutDeprecatedRenderToStaticNodeStream = true;
71+
console.error(
72+
'ReactDOMServer.renderToStaticNodeStream() is deprecated and will be removed in an upcoming' +
73+
'release of React. Use ReactDOMServer.renderToPipeableStream() and wait to `pipe` until the `onAllReady`' +
74+
' callback has been called to produce a document suitable for static use cases.',
75+
);
76+
}
77+
}
78+
6679
function onAllReady() {
6780
// We wait until everything has loaded before starting to write.
6881
// That way we only end up with fully resolved HTML even if we suspend.

0 commit comments

Comments
 (0)
Please sign in to comment.