Sie können verwenden React.cloneElement
, es ist besser zu wissen, wie es funktioniert, bevor Sie es in Ihrer Anwendung verwenden. Es wird in eingeführt React v0.13
, lesen Sie weiter für weitere Informationen, also etwas zusammen mit dieser Arbeit für Sie:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Bringen Sie also die Zeilen aus der React-Dokumentation mit, damit Sie verstehen, wie alles funktioniert und wie Sie sie verwenden können:
In React v0.13 RC2 werden wir eine neue API einführen, ähnlich wie React.addons.cloneWithProps, mit dieser Signatur:
React.cloneElement(element, props, ...children);
Im Gegensatz zu cloneWithProps verfügt diese neue Funktion über kein integriertes magisches Verhalten zum Zusammenführen von Stil und Klassenname, aus dem gleichen Grund, aus dem wir diese Funktion von transferPropsTo nicht haben. Niemand ist sich sicher, was genau die vollständige Liste der magischen Dinge ist, was es schwierig macht, über den Code nachzudenken und ihn wiederzuverwenden, wenn der Stil eine andere Signatur hat (z. B. im kommenden React Native).
React.cloneElement entspricht fast:
<element.type {...element.props} {...props}>{children}</element.type>
Im Gegensatz zu JSX und cloneWithProps werden jedoch auch refs beibehalten. Das heißt, wenn Sie ein Kind mit einem Schiedsrichter haben, werden Sie es nicht versehentlich Ihrem Vorfahren stehlen. Sie erhalten den gleichen Verweis an Ihr neues Element.
Ein häufiges Muster besteht darin, Ihre Kinder abzubilden und eine neue Requisite hinzuzufügen. Es wurden viele Probleme gemeldet, bei denen cloneWithProps den Ref verloren hat, was es schwieriger macht, über Ihren Code nachzudenken. Wenn Sie nun mit cloneElement dem gleichen Muster folgen, funktioniert dies wie erwartet. Zum Beispiel:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Hinweis: React.cloneElement (child, {ref: 'newRef'}) überschreibt den Ref, sodass zwei Eltern immer noch keinen Ref für dasselbe Kind haben können, es sei denn, Sie verwenden Callback-Refs.
Dies war eine wichtige Funktion für React 0.13, da Requisiten jetzt unveränderlich sind. Der Upgrade-Pfad besteht häufig darin, das Element zu klonen. Andernfalls verlieren Sie möglicherweise die Referenz. Deshalb brauchten wir hier einen schöneren Upgrade-Pfad. Als wir Callsites bei Facebook aktualisierten, stellten wir fest, dass wir diese Methode brauchten. Wir haben das gleiche Feedback von der Community erhalten. Aus diesem Grund haben wir uns entschlossen, vor der endgültigen Veröffentlichung einen weiteren RC zu erstellen, um sicherzustellen, dass wir diesen erhalten.
Wir planen, React.addons.cloneWithProps irgendwann zu verwerfen. Wir tun es noch nicht, aber dies ist eine gute Gelegenheit, über Ihre eigenen Verwendungszwecke nachzudenken und stattdessen React.cloneElement zu verwenden. Wir werden sicher sein, eine Version mit Verfallsbenachrichtigungen zu versenden, bevor wir sie tatsächlich entfernen, sodass keine sofortigen Maßnahmen erforderlich sind.
mehr hier ...