De hecho, React.cloneElement
no está estrictamente asociado con this.props.children
.
Es útil siempre que necesite clonar elementos de reacción ( PropTypes.element
) para agregar / anular accesorios, sin querer que el padre tenga conocimiento sobre esos componentes internos (por ejemplo, adjuntar controladores de eventos o asignar key
/ ref
atributos).
También los elementos de reacción son inmutables .
React.cloneElement (element, [props], [... children]) es casi equivalente a:
<element.type {...element.props} {...props}>{children}</element.type>
Sin embargo, el children
accesorio en React se usa especialmente para contención (también conocido como composición ), emparejamiento con React.Children
API y React.cloneElement
componente que usa accesorios. Los niños pueden manejar más lógica (por ejemplo, transiciones de estado, eventos, mediciones DOM, etc.) internamente mientras ceden la parte de renderizado donde sea que se use, React Router <switch/>
o componente compuesto <select/>
son algunos buenos ejemplos.
Una última cosa que vale la pena mencionar es que los elementos de reacción no se limitan 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 />
} />
);
}
Pueden ser lo que los apoyos que tenga sentido, la clave es definir un contrato bueno para el componente, de manera que los consumidores de que pueden ser desacoplados de los detalles de implementación subyacentes, independientemente de si se está usando React.Children
, React.cloneElement
o incluso React.createContext
.