Skip to content

Instantly share code, notes, and snippets.

@ScriptedAlchemy
Created November 18, 2021 03:24
Show Gist options
  • Save ScriptedAlchemy/115f4f03a586effc67d76d636aea9ad9 to your computer and use it in GitHub Desktop.
Save ScriptedAlchemy/115f4f03a586effc67d76d636aea9ad9 to your computer and use it in GitHub Desktop.
Recursive Measure Render
function recursiveMap(children, fn) {
return React.Children.map(children, (child) => {
if (!React.isValidElement(child)) {
return child;
}
if (child.props.children) {
child = React.cloneElement(child, {
children: recursiveMap(child.props.children, fn),
});
}
return fn(child);
});
}
const RecursiveMeasureRender = ({ children, postfix = '' }) => {
const fn = (el) => {
const componentName = el?.type?.displayName || el?.type?.name;
if (componentName && !componentName?.includes?.('LazyHydrate') && !componentName?.includes?.('MeasureRender')) {
// if (!el?.type?.displayName) console.log('missing displayName', el?.type?.name);
return (
<MeasureRender name={(el.type.displayName || el.type.name) + postfix}>
{React.isValidElement(el) && el}
</MeasureRender>
);
}
return el;
};
if (process.browser) {
if (window.withPerf) {
return <>{recursiveMap(children, fn)}</>;
}
}
return children;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment