don't regenerate root every render

This commit is contained in:
Chris Wanstrath 2026-02-12 07:42:23 -08:00
parent 860ceba320
commit 30db3822d6

View File

@ -286,14 +286,18 @@ export function define(nameOrDef: string | TagDef, defIfNamed?: TagDef) {
if (styles[`.${name}`]) throw `${name} is already defined! Must use unique names.` if (styles[`.${name}`]) throw `${name} is already defined! Must use unique names.`
registerStyles(name, def) registerStyles(name, def)
const currentProps: Record<string, any> = {}
const Root = makeComponent(name, def, currentProps)
return (props: Record<string, any>) => { return (props: Record<string, any>) => {
const parts: Record<string, Function> = {} for (const key in currentProps) delete currentProps[key]
Object.assign(currentProps, props)
const parts: Record<string, Function> = { Root }
for (const [part] of Object.entries(def.parts ?? {})) for (const [part] of Object.entries(def.parts ?? {}))
parts[part] = makeComponent(name, def, props, part) parts[part] = makeComponent(name, def, props, part)
parts.Root = makeComponent(name, def, props) return def.render?.({ props, parts }) ?? <Root {...props}>{props.children}</Root>
return def.render?.({ props, parts }) ?? <parts.Root {...props}>{props.children}</parts.Root>
} }
} }