React / JSX Name der dynamischen Komponente
Ich versuche, dynamisch zu Rendern-Komponenten, die basierend auf Ihrem Typ.
Beispiel:
var type = "Example";
var ComponentName = type + "Component";
return <ComponentName />;
//Returns <examplecomponent /> instead of <ExampleComponent />
Habe ich versucht, den hier vorgeschlagenen Lösung Reagieren/JSX dynamische Komponente-Namen
Dass mir ein Fehler beim kompilieren (mit browserify für gulp). Es erwartet XML, wo ich war, mit einem array-syntax.
Konnte ich dies lösen, indem Sie die Schaffung einer Methode für jede Komponente:
newExampleComponent() {
return <ExampleComponent />;
}
newComponent(type) {
return this["new" + type + "Component"]();
}
Aber das würde bedeuten, dass eine neue Methode für jede Komponente, die ich erstellen. Es muss eine elegantere Lösung für dieses problem.
Bin ich sehr offen für Vorschläge.
InformationsquelleAutor der Frage Sam | 2015-04-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
<MyComponent />
kompiliertReact.createElement(MyComponent, {})
was erwartet einen string (HTML-tag) oder eine Funktion (ReactClass) als ersten parameter.Sie könnten nur speichern Ihrer Komponenten-Klasse in eine variable mit einem Namen beginnt mit einem Großbuchstaben. Sehen HTML-tags Reagieren vs-Komponenten.
kompiliert
InformationsquelleAutor der Antwort Alexandre Kirszenberg
Gibt es eine offizielle Dokumentation über den Umgang mit solchen Situationen ist hier erhältlich: https://facebook.github.io/react/docs/jsx-in-depth.html#choosing-the-type-at-runtime
Grundsätzlich heißt es:
Falsch:
Richtig:
InformationsquelleAutor der Antwort gmfvpereira
Dachte ich, eine neue Lösung zu finden. Bitte beachten Sie, dass ich mit ES6-Module, so bin ich dass der Klasse. Sie konnte auch Reagieren, definieren Sie eine neue Klasse, statt.
InformationsquelleAutor der Antwort Sam
Für eine wrapper-Komponente, eine einfache Lösung wäre, nur verwenden
React.createElement
direkt (über ES6).InformationsquelleAutor der Antwort Ricardo Pedroni
Ich ein bisschen anderer Ansatz, als wissen wir immer unsere aktuellen Komponenten, so dachte ich gelten switch case.
Auch insgesamt keine der Komponenten waren etwa 7-8 in meinem Fall.
InformationsquelleAutor der Antwort abhirathore2006
Suspose wir wollen den Zugriff auf die verschiedenen Ansichten, die mit der dynamischen Komponente laden.Der folgende code gibt ein Beispiel, wie dies zu erreichen, indem eine string geparst wird aus dem such-string einer url.
Nehmen wir an, wir möchten eine Seite zuzugreifen, die 'snozberrys' mit zwei einzigartigen Blick über diese url-Pfade:
und
definieren wir unsere view-controller wie diesem:
InformationsquelleAutor der Antwort 1-14x0r
Edit: die Anderen Antworten sind besser, siehe Kommentare.
Gelöst ich das gleiche problem auf diese Weise:
InformationsquelleAutor der Antwort Hammad Akhwand