Na verdade, React.cloneElementnão está estritamente associado this.props.children.
É útil sempre que você precisa clonar os elementos react ( PropTypes.element) para adicionar / sobrescrever props, sem querer que o pai tenha conhecimento sobre os componentes internos (por exemplo, anexar manipuladores de eventos ou atribuir key/ refatributos).
Além disso, os elementos reactivos são imutáveis .
React.cloneElement (element, [props], [... children]) é quase equivalente a:
<element.type {...element.props} {...props}>{children}</element.type>
No entanto, o childrenprop no React é especialmente usado para contenção (também conhecido como composição ), emparelhamento com React.ChildrenAPI e React.cloneElement, componente que usa props.children pode lidar com mais lógica (por exemplo, transições de estado, eventos, medições de DOM etc) internamente enquanto produz a parte de renderização para onde quer que seja usado, React Router <switch/>ou componente composto <select/>são alguns ótimos exemplos.
Uma última coisa que vale a pena mencionar é que os elementos de reação não se restringem a props.children.
function SplitPane(props) {
return (
<div className="SplitPane">
<div className="SplitPane-left">
{props.left}
</div>
<div className="SplitPane-right">
{props.right}
</div>
</div>
);
}
function App() {
return (
<SplitPane
left={
<Contacts />
}
right={
<Chat />
} />
);
}
Eles podem ser o que adereços que faz sentido, a chave foi definir um contrato bom para o componente, de modo que os consumidores de que pode ser dissociado dos detalhes de implementação subjacentes, independentemente se ele está usando React.Children, React.cloneElementou até mesmo React.createContext.