W rzeczywistości React.cloneElementnie jest ściśle powiązany z this.props.children.
Jest to przydatne, gdy trzeba sklonować elementy reagujące ( PropTypes.element), aby dodać / nadpisać właściwości, bez potrzeby, aby rodzic miał wiedzę o tych elementach wewnętrznych (np. Dołączanie programów obsługi zdarzeń lub przypisywanie key/ refatrybuty).
Również elementy reakcji są niezmienne .
React.cloneElement (element, [props], [... children]) jest prawie równoważne z:
<element.type {...element.props} {...props}>{children}</element.type>
Jednak childrenprop w React jest szczególnie używany do zawierania (aka kompozycji ), parowania z React.ChildrenAPI i React.cloneElementkomponentu, który używa właściwości. Dzieci mogą obsługiwać więcej logiki (np. Przejścia stanów, zdarzenia, pomiary DOM itp.) Wewnętrznie, podczas oddawania części renderującej do Gdziekolwiek jest używany, React Router <switch/>lub komponent złożony <select/>są świetnymi przykładami.
Ostatnią rzeczą, o której warto wspomnieć, jest to, że elementy reagujące nie są ograniczone do rekwizytów dzieci.
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 />
} />
);
}
Mogą być cokolwiek rekwizyty, które ma sens, kluczowe było określenie umowę dobre dla komponentu tak, że konsumenci z niej może być oddzielona od szczegółów implementacji bazowych, niezależnie czy to za pomocą React.Children, React.cloneElementlub nawet React.createContext.