diff --git a/packages/react/src/__tests__/ReactChildren-test.js b/packages/react/src/__tests__/ReactChildren-test.js
index 5cce6b24873f0..7843d203b0a15 100644
--- a/packages/react/src/__tests__/ReactChildren-test.js
+++ b/packages/react/src/__tests__/ReactChildren-test.js
@@ -1039,6 +1039,31 @@ describe('ReactChildren', () => {
});
});
+ it('does not throw on children without `_store`', async () => {
+ function ComponentRenderingFlattenedChildren({children}) {
+ return
{React.Children.toArray(children)}
;
+ }
+
+ const source = ;
+ const productionElement = {};
+ Object.entries(source).forEach(([key, value]) => {
+ if (key !== '_owner' && key !== '_store') {
+ productionElement[key] = value;
+ }
+ });
+ Object.freeze(productionElement);
+
+ const container = document.createElement('div');
+ const root = ReactDOMClient.createRoot(container);
+ await act(() => {
+ root.render(
+
+ {productionElement}
+ ,
+ );
+ });
+ });
+
it('should escape keys', () => {
const zero = ;
const one = ;
diff --git a/packages/react/src/jsx/ReactJSXElement.js b/packages/react/src/jsx/ReactJSXElement.js
index e0a689ec2404f..5edcb333ea571 100644
--- a/packages/react/src/jsx/ReactJSXElement.js
+++ b/packages/react/src/jsx/ReactJSXElement.js
@@ -813,7 +813,9 @@ export function cloneAndReplaceKey(oldElement, newKey) {
);
if (__DEV__) {
// The cloned element should inherit the original element's key validation.
- clonedElement._store.validated = oldElement._store.validated;
+ if (oldElement._store) {
+ clonedElement._store.validated = oldElement._store.validated;
+ }
}
return clonedElement;
}