--- title: Prefer Composing Children Over Render Props impact: MEDIUM impactDescription: cleaner composition, better readability tags: composition, children, render-props --- ## Prefer Children Over Render Props Use `children` for composition instead of `renderX` props. Children are more readable, compose naturally, and don't require understanding callback signatures. **Incorrect (render props):** ```tsx function Composer({ renderHeader, renderFooter, renderActions, }: { renderHeader?: () => React.ReactNode; renderFooter?: () => React.ReactNode; renderActions?: () => React.ReactNode; }) { return (
{renderHeader?.()} {renderFooter ? renderFooter() : } {renderActions?.()} ); } // Usage is awkward and inflexible return ( } renderFooter={() => ( <> )} renderActions={() => } /> ); ``` **Correct (compound components with children):** ```tsx function ComposerFrame({ children }: { children: React.ReactNode }) { return
{children}
; } function ComposerFooter({ children }: { children: React.ReactNode }) { return
{children}
; } // Usage is flexible return ( ); ``` **When render props are appropriate:** ```tsx // Render props work well when you need to pass data back } /> ``` Use render props when the parent needs to provide data or state to the child. Use children when composing static structure.