# Reflect.6. Replacing components — Mercury LMS > Contract: `@fiberfx/reflect` 4.1.1; Hypergraph and Hyperscript 4.1.1. ## Supported pattern Stable module-level registry; store only selection identifier; mapProps returns constructor unchanged. Use ComponentType for function/class views. Per-row pattern: mapItem wraps item, mapProps RowView uses source:{} and props.item.kind. ## Callable semantics bind/mapItem scope-wrap raw functions. mapProps preserves constructor and callback-ref identity. Projected event/effect retains methods but is not scoped for invocation. Child useUnit follows the Provider where it renders; an outer bound action keeps its outer scope. ## Observation [Components lab](/examples/reflect-lab/index.html?part=components&lang=en): increment Compact, switch to Detailed, return. Each constructor change starts fresh local state. Same key plus same constructor can preserve a keyed child's state; same key plus different constructor cannot transfer it. ## Refusals Do not manufacture constructor functions inside projections or put them in bind/mapItem. Check registry own properties and reject/fallback unknown names. No shipped selector/slot/preset descriptor is involved. Source: composition.test.ts:43-138 and Reflect.prompt.md:42-55; npm 4.1.1. ## Navigation - [HTML](/reflect/components) - [Reflect](/reflect/llms.txt) - [Index](/llms.txt) - [Sitemap](/sitemap.xml) - [All English companions](/llms-full.txt)