Es un patrón de diseño de componentes que se basa en crear un componente padre con un solo objetivo, proporcionarle a sus hijos las propiedades necesarias para que se rendericen sin problemas.
Permite una estructura declarativa a la hora de construir nuevos componentes, además ayuda a la lectura del código por su simplicidad y limpieza.
Un ejemplo de este diseño sería una lista que renderiza los elementos hijos:
<List>
<ListItem>Cat</ListItem>
<ListItem>Dog</ListItem>
</List>
const List = ({ children, ...props }) => (
<ul {...props} >
{children}
</ul>
);
const ListItem = ({ children, ...props }) => {
return (
<li {...props}>
{children}
</li>
);
};
export { List, ListItem };
Este es un ejemplo sencillo, pero los componentes pueden ser tan complejos como quieras y tanto el padre como los hijos pueden tener sus propios estados.
Enlaces de interés:
Lleva tu React al siguiente nivel con Compound Pattern by dezkareid en el blog de Platzi
Compound Components by Jenna Smith en inglés