Skip to content

Commit 9acaf78

Browse files
report render error and generate fallback html at different callbacks according to react docs
1 parent 009f69e commit 9acaf78

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

node_package/src/streamServerRenderedReactComponent.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -160,15 +160,16 @@ const streamRenderReactComponent = (
160160
const { readableStream, pipeToTransform, writeChunk, emitError, endStream } =
161161
transformRenderStreamChunksToResultObject(renderState);
162162

163-
const onShellError = (e: unknown) => {
164-
const error = convertToError(e);
163+
const reportError = (error: Error) => {
165164
renderState.hasErrors = true;
166165
renderState.error = error;
167166

168167
if (throwJsErrors) {
169168
emitError(error);
170169
}
170+
};
171171

172+
const sendErrorHtml = (error: Error) => {
172173
const errorHtml = handleError({ e: error, name: componentName, serverSide: true });
173174
writeChunk(errorHtml);
174175
endStream();
@@ -189,26 +190,24 @@ const streamRenderReactComponent = (
189190
}
190191

191192
const renderingStream = ReactDOMServer.renderToPipeableStream(reactRenderedElement, {
192-
onShellError,
193+
onShellError(e) {
194+
sendErrorHtml(convertToError(e));
195+
},
193196
onShellReady() {
194197
renderState.isShellReady = true;
195198
pipeToTransform(renderingStream);
196199
},
197200
onError(e) {
198-
if (!renderState.isShellReady) {
199-
return;
200-
}
201-
const error = convertToError(e);
202-
if (throwJsErrors) {
203-
emitError(error);
204-
}
205-
renderState.hasErrors = true;
206-
renderState.error = error;
201+
reportError(convertToError(e));
207202
},
208203
identifierPrefix: domNodeId,
209204
});
210205
})
211-
.catch(onShellError);
206+
.catch((e: unknown) => {
207+
const error = convertToError(e);
208+
reportError(error);
209+
sendErrorHtml(error);
210+
});
212211

213212
return readableStream;
214213
};

0 commit comments

Comments
 (0)