--- 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.