Heute habe ich angefangen, ReactJS zu lernen und bin nach einer Stunde mit dem Problem konfrontiert. Ich möchte eine Komponente einfügen, die zwei Zeilen in einem Div auf der Seite enthält. Ein vereinfachtes Beispiel dafür, was ich unten mache.
Ich habe ein HTML:
<html>
..
<div id="component-placeholder"></div>
..
</html>
Renderfunktion wie folgt:
...
render: function() {
return(
<div className="DeadSimpleComponent">
<div className="DeadSimpleComponent__time">10:23:12</div >
<div className="DeadSimpleComponent__date">MONDAY, 2 MARCH 2015</div>
</div>
)
}
....
Und unten rufe ich render auf:
ReactDOM.render(<DeadSimpleComponent/>, document.getElementById('component-placeholder'));
Generiertes HTML sieht folgendermaßen aus:
<html>
..
<div id="component-placeholder">
<div class="DeadSimpleComponent">
<div class="DeadSimpleComponent__time">10:23:12</div>
<div class="DeadSimpleComponent__date">MONDAY, 2 MARCH 2015</div>
</div>
</div>
..
</html>
Das Problem, dass ich nicht sehr glücklich bin, dass React mich zwingt, alles in eine div "DeadSimpleComponent" zu packen. Was ist die beste und einfachste Problemumgehung ohne explizite DOM-Manipulationen?
UPDATE 28.07.2017: Die Verantwortlichen von React haben diese Möglichkeit in React 16 Beta 1 hinzugefügt
Seit React 16.2 können Sie Folgendes tun:
render() {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}
javascript
reactjs
Kirill Reznikov
quelle
quelle
Antworten:
Diese Anforderung wurde in React Version (16.0)] 1 entfernt , sodass Sie diesen Wrapper jetzt vermeiden können.
Mit React.Fragment können Sie eine Liste von Elementen rendern, ohne einen übergeordneten Knoten zu erstellen. Offizielles Beispiel:
Mehr hier: Fragmente
quelle
Update 2017-12-05: React v16.2.0 unterstützt jetzt das Rendern von Fragmenten vollständig mit verbesserter Unterstützung für die Rückgabe mehrerer untergeordneter Elemente aus einer Komponenten-Rendermethode, ohne Schlüssel in untergeordneten Elementen anzugeben:
Wenn Sie eine React-Version vor Version 16.2.0 verwenden, können Sie
<React.Fragment>...</React.Fragment>
stattdessen auch Folgendes verwenden :Original:
In React v16.0 wurde die Rückgabe eines Arrays von Elementen in der Rendermethode eingeführt, ohne es in ein div zu verpacken: https://reactjs.org/blog/2017/09/26/react-v16.0.html
Derzeit ist für jedes Element ein Schlüssel erforderlich, um die Schlüsselwarnung zu vermeiden. Dies kann jedoch in zukünftigen Versionen geändert werden:
quelle
Sie können verwenden:
Weitere Einzelheiten finden Sie in dieser Dokumentation .
quelle
Verwenden Sie [] anstelle von (), um die gesamte Rückgabe zu verpacken.
quelle
Ich habe eine Komponente erstellt, um untergeordnete Komponenten ohne DIV zu verpacken. Es wird als Schattenverpackung bezeichnet: https://www.npmjs.com/package/react-shadow-wrapper
quelle
Dies ist weiterhin erforderlich . ABER Reagieren Sie jetzt, um Elemente zu erstellen, ohne ein zusätzliches DOM-Element zu erstellen.
Die zusätzliche Umhüllung ist erforderlich (normalerweise mit einem übergeordneten
div
Element), da für die Reacts-createElement
Methode eintype
Parameter erforderlich isteither a tag name string (such as 'div' or 'span'), a React component type (a class or a function)
. Aber das war, bevor sie React einführtenFragment
.In diesem NEUEN API-Dokument finden Sie Informationen zu createElement
Hier ist das offizielle Beispiel, Refer React.Fragment .
quelle
Sie werden dieses
div
Element nicht loswerden können . React.render () muss einen gültigen DOM-Knoten zurückgeben.quelle
Hier ist eine Möglichkeit, "transzulente" Komponenten zu rendern:
quelle
Es gibt auch eine Problemumgehung. Der folgende Blockcode generiert ein Fragment, ohne dass React.Fragment erforderlich ist.
quelle
Ich weiß, dass diese Frage beantwortet wurde. Sie können natürlich React.Fragment verwenden, das keinen Knoten erstellt, aber Sie können Dinge wie ein Div gruppieren.
Wenn Sie Spaß haben möchten, können Sie außerdem einen Reaktionsmodus implementieren (und viele Dinge lernen), der die zusätzlichen Divs entfernt. Dazu möchte ich ein großartiges Video darüber veröffentlichen, wie Sie dies auf der Basis des Reaktionscodes selbst tun können.
https://www.youtube.com/watch?v=aS41Y_eyNrU
Dies ist natürlich nichts, was Sie in der Praxis tun würden, aber es ist eine gute Lernmöglichkeit.
quelle