diff --git a/packages/react-client/src/__tests__/ReactFlight-test.js b/packages/react-client/src/__tests__/ReactFlight-test.js
index bd2d98736addd..61f80e20553f1 100644
--- a/packages/react-client/src/__tests__/ReactFlight-test.js
+++ b/packages/react-client/src/__tests__/ReactFlight-test.js
@@ -690,14 +690,22 @@ describe('ReactFlight', () => {
const transport = ReactNoopFlightServer.render();
- await act(async () => {
- const rootModel = await ReactNoopFlightClient.read(transport);
- ReactNoop.render(rootModel);
- });
- expect(ReactNoop).toMatchRenderedOutput('Loading...');
- spyOnDevAndProd(console, 'error').mockImplementation(() => {});
await load();
- expect(console.error).toHaveBeenCalledTimes(1);
+
+ await expect(async () => {
+ await act(async () => {
+ const rootModel = await ReactNoopFlightClient.read(transport);
+ ReactNoop.render(rootModel);
+ });
+ }).rejects.toThrow(
+ __DEV__
+ ? 'Element type is invalid: expected a string (for built-in components) or a class/function ' +
+ '(for composite components) but got:
. ' +
+ 'Did you accidentally export a JSX literal instead of a component?'
+ : 'Element type is invalid: expected a string (for built-in components) or a class/function ' +
+ '(for composite components) but got: object.',
+ );
+ expect(ReactNoop).toMatchRenderedOutput(null);
});
it('can render a lazy element', async () => {
diff --git a/packages/react-server/src/ReactFlightServer.js b/packages/react-server/src/ReactFlightServer.js
index 40a32948e1951..074114d62c4fb 100644
--- a/packages/react-server/src/ReactFlightServer.js
+++ b/packages/react-server/src/ReactFlightServer.js
@@ -110,7 +110,6 @@ import {
} from 'shared/ReactSymbols';
import {
- describeValueForErrorMessage,
describeObjectForErrorMessage,
isSimpleObject,
jsxPropsParents,
@@ -1591,6 +1590,14 @@ function renderElement(
validated,
);
}
+ case REACT_ELEMENT_TYPE: {
+ // This is invalid but we'll let the client determine that it is.
+ if (__DEV__) {
+ // Disable the key warning that would happen otherwise because this
+ // element gets serialized inside an array. We'll error later anyway.
+ type._store.validated = 1;
+ }
+ }
}
}
// For anything else, try it on the client instead.