Dynamisches laden von Komponenten reagieren
Ich zum laden brauchen, reagieren Komponente dynamisch.
Bekomme ich den Namen der Komponente zu laden als einen string vom Benutzer. Ich bin mit webpack.
Wie lade ich die Komponente dynamisch, anstatt einen statischen import-Anweisung. Es scheint Require.Ensure
nicht Ausdrücke auswerten . Was ich erreichen will ist so etwas wie dieses.
require.ensure([ "./widgets/" + componentName ] ,(require) => {
let Component = require("./widgets/" + componentName);
});
Aber das scheint nicht zu funktionieren.
require.ensure
ist statisch analysiert, korrekt. Sie müssen einen anderen Weg finden.- Ist es möglich mit webpack?
- Sie könnten erfordern.Kontext und dann
require
gegen die. - nicht erfordern.Kontext erstellen ein riesiges Bündel aus dem Verzeichnis ? ich würde wirklich zu schätzen einige Beispiel-code. Vielen Dank 🙂
- Würden Sie dagegen sein, mit einer dynamischen loader wie wenig-Lader, wenn
require.context
nicht schneiden Sie es? Sie wäre noch zu kompilieren Ihrer Komponenten, aber es würde funktionieren mit einer vollständig dynamischen Fall. - Dies könnte helfen: github.com/ryanflorence/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Grunde läuft es auf pre-erstellen aller chunks, die Sie je brauchen. Dann brauchen Sie nur ein Weg, um dynamisch auf diese verweisen. Hier ist die Lösung, die ich basierend mine auf:
http://henleyedition.com/implicit-code-splitting-with-react-router-and-webpack
und hier ist was ich da Tue, verwende ich nicht Reagieren-Router (Randbemerkung: ich dont finden, dass es ein gutes Spiel für redux oder Animationen):
Also das Ergebnis ist Sie sind dynamisch Rendern einer Komponente, sondern aus einer statischen vordefinierten Satz von Möglichkeiten--alle, während Sie, nur senden nicht mehr an den client als der Brocken die Besucher eigentlich interessiert.
AUCH hier ist eine Komponente, die ich habe, das dies tut gut:
pass eine asynchrone erfordern bundler Funktion als
this.props.requestLazybundle
wie diese:require.resolveWeak
Funktion. Abstimmung und Kommentar, mein Problem hier zu bekommen, dies früher als später: github.com/webpack/webpack/issues/4993Bitte haben Sie einen Blick auf diese wesentliche Seite, die ich zur Verfügung gestellt haben für den vollständigen Quellcode
https://gist.github.com/SamanShafigh/a0fbc2483e75dc4d6f82ca534a6174d4
Also lassen Sie uns annehmen, du hast 4 Komponenten genannt, D1, D2, D3. Was Sie brauchen ist ein dependency injection und einen dependency-container-Mechanismus. Dies ist eine sehr einfache Umsetzung
Stellen Sie sich vor Sie haben eine config-Datei wie diese, die legt Ihre Komponenten
Dann können Sie eine Komponente container so etwas wie dieses
Schließlich in den Ort, den Sie möchten, laden Sie Ihre Komponenten können Sie Ihre Komponenten-container zum laden der Komponenten dynamisch oder in anderen Wort kann man Spritzen Sie Ihre Komponenten
Hatte ich eine andere Lösung wegen meinem Problem ein wenig anders, ich suchte nach einer Antwort für eine Weile, aber konnte es nicht finden. Hoffentlich kann jemand helfen.
Mein Problem war, dass wir hatten mehrere Applikationen unabhängig voneinander als unterschiedliche Module innerhalb eines core-UI. Diese mussten komplett voneinander unabhängig einsetzbare innerhalb haben keine Auswirkungen auf die anderen.
Meine Lösung war es, die sub-Komponente Anwendungen verpackt als web-pack-Bibliotheken, indem Sie diese webpack Eigenschaften:
Ich denke, 2 Einstiegspunkte, für die die Anwendung basierend auf es zugegriffen wird, entweder direkt oder über eine übergeordnete Komponente in einer separaten Anwendung
Einmal diese app gebaut wird kann ich direkt in die index.html mit
Oder wenn Sie möchten, um Zugriff auf die Anwendung mit einem separaten host - /Komponenten-wie war meine Anforderung können Sie dies tun, indem Sie eine Kombination von loadjs und reagieren.
Diesem laden kann, in der ein reagieren Komponente in jeder Art von javascript-client-side-framework, in unserem Fall verwendeten wir das Rückgrat in der wrapper-Anwendung. Die bundle.min.js befand sich auch hinter einem reverse-proxy, aber es könnte sich überall befinden, es ist nur wichtig, dass Sie laden Sie es in und warten Sie das laden zu beenden, die loadjs war perfekt in diesem Fall. Eine Letzte wichtige bit an information war, dass die Zerstörung der Komponente war entscheidend für die Sicherstellung einer guten user experience, als ohne stießen wir auf eine Reihe von Fragen.
So, in einer nussschale, was ich fühle, dieses liefert über die anderen Antworten völlig voneinander unabhängig einsetzbare suite von Anwendungen, die komplett mit Rahmen Agnostiker.