Skip to content

Commit

Permalink
Permit non-DEV Elements in React.Children w/ DEV (facebook#32117)
Browse files Browse the repository at this point in the history
  • Loading branch information
yungsters authored Jan 31, 2025
1 parent 87c03a0 commit 9ff42a8
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
25 changes: 25 additions & 0 deletions packages/react/src/__tests__/ReactChildren-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1039,6 +1039,31 @@ describe('ReactChildren', () => {
});
});

it('does not throw on children without `_store`', async () => {
function ComponentRenderingFlattenedChildren({children}) {
return <div>{React.Children.toArray(children)}</div>;
}

const source = <div />;
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(
<ComponentRenderingFlattenedChildren>
{productionElement}
</ComponentRenderingFlattenedChildren>,
);
});
});

it('should escape keys', () => {
const zero = <div key="1" />;
const one = <div key="1=::=2" />;
Expand Down
4 changes: 3 additions & 1 deletion packages/react/src/jsx/ReactJSXElement.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 9ff42a8

Please sign in to comment.