Ich habe mit React herumgespielt und bis jetzt mag ich es wirklich. Ich erstelle eine App mit NodeJS und möchte React für einige der interaktiven Komponenten in der gesamten Anwendung verwenden. Ich möchte es nicht zu einer einseitigen App machen.
Ich habe noch nichts im Internet gefunden, das die folgenden Fragen beantwortet:
Wie kann ich meine React-Komponenten in einer mehrseitigen App aufteilen oder bündeln?
Derzeit befinden sich alle meine Komponenten in einer Datei, obwohl ich sie in einigen Abschnitten der App möglicherweise nie laden werde.
Bisher versuche ich, bedingte Anweisungen zum Rendern von Komponenten zu verwenden, indem ich nach der ID des Containers suche, in dem React gerendert wird. Ich bin mir nicht 100% sicher, welche Best Practices bei React angewendet werden. Es sieht ungefähr so aus.
if(document.getElementById('a-compenent-in-page-1')) {
React.render(
<AnimalBox url="/api/birds" />,
document.getElementById('a-compenent-in-page-1')
);
}
if(document.getElementById('a-compenent-in-page-2')) {
React.render(
<AnimalBox url="/api/cats" />,
document.getElementById('a-compenent-in-page-2')
);
}
if(document.getElementById('a-compenent-in-page-3')) {
React.render(
<AnimalSearchBox url="/api/search/:term" />,
document.getElementById('a-compenent-in-page-3')
);
}
Ich lese immer noch die Dokumentation und habe noch nicht gefunden, was ich für eine mehrseitige App benötige.
Danke im Voraus.
quelle
render
die richtige Komponente in einemscript
Block haben.Antworten:
Derzeit mache ich etwas Ähnliches.
Die Anwendung ist keine vollständige React-App. Ich verwende React für dynamische Inhalte wie CommentBox, die autark ist. Und kann an jedem Punkt mit speziellen Parametern aufgenommen werden.
Alle meine Unter-Apps werden jedoch geladen und in eine einzelne Datei aufgenommen
all.js
, sodass sie vom Browser seitenübergreifend zwischengespeichert werden können.Wenn ich eine App in die SSR-Vorlagen aufnehmen muss, muss ich nur einen DIV mit der Klasse "__react-root" und einer speziellen ID (den Namen der zu rendernden React-App) einfügen.
Die Logik ist wirklich einfach:
Bearbeiten
Da Webpack Code-Splitting und LazyLoading perfekt unterstützt, hielt ich es für sinnvoll, ein Beispiel aufzunehmen, in dem Sie nicht alle Ihre Apps in einem Bundle laden müssen, sondern sie aufteilen und bei Bedarf laden müssen.
quelle
create react app
bietet Ihnen einige einfache Werkzeuge zum Erstellenbundle.js
. Der Zweck meiner Antwort besteht also darin, dasselbe zu verwendenbundle.js
und es auf mehreren SSR-Sites zu verwenden und viele verschiedene React-Anwendungen auf eine einzige Seite zu laden. Entschuldigung, wenn meine Antwort nicht Ihren Anforderungen entspricht, können Sie gerne einen neuen Beitrag erstellen und beschreiben, was Sie versuchen. Ich würde versuchen, Ihnen zu helfen.In der Datei webpack.config.js können Sie mehrere Einstiegspunkte für die Anwendung angeben:
dann können Sie in Ihrem src-Ordner drei verschiedene HTML-Dateien mit ihren jeweiligen js-Dateien haben (Beispiel für Seite 1):
JavaScript-Datei:
Anschließend können für jede einzelne Seite verschiedene React-Komponenten geladen werden.
quelle
webpack version < 4 it was common to add vendors as separate entrypoint to compile it as separate file (in combination with the CommonsChunkPlugin). This is discouraged in webpack 4. Instead the optimization.splitChunks option takes care of separating vendors and app modules and creating a separate file. Do not create a entry for vendors or other stuff which is not the starting point of execution.
Sollte dieses Beispiel für Webpack 4+ aktualisiert werden?Ich erstelle eine Anwendung von Grund auf und lerne, während ich gehe, aber ich denke, was Sie suchen, ist React-Router . React-Router ordnet Ihre Komponenten bestimmten URLs zu. Beispielsweise:
Im Suchfall ist 'Begriff' als Eigenschaft in der AnimalSearchBox zugänglich:
Versuch es. Dieses Tutorial hat mich in Bezug auf mein Verständnis dieses und anderer verwandter Themen übertrieben.
Die ursprüngliche Antwort folgt:
Ich fand meinen Weg hierher und suchte nach der gleichen Antwort. Sehen Sie, ob dieser Beitrag Sie inspiriert. Wenn Ihre Anwendung so etwas wie meine ist, hat sie Bereiche, die sich nur sehr wenig ändern und nur im Hauptteil variieren. Sie können ein Widget erstellen, dessen Aufgabe es ist, basierend auf dem Status der Anwendung ein anderes Widget zu rendern. Mithilfe einer Flussarchitektur können Sie eine Navigationsaktion auslösen, die den Status ändert, in den Ihr Body-Widget wechselt, und so nur den Body der Seite effektiv aktualisieren.
Das ist der Ansatz, den ich jetzt versuche.
quelle
Router
das genauso wie in einer App mit nur einer Seite?Verwenden Sie ein CMS? Sie neigen dazu, URLs zu ändern, die Ihre Anwendung beschädigen könnten.
Ein anderer Weg ist die Verwendung von React Habitat .
Damit können Sie Komponenten registrieren und diese werden automatisch dem Dom ausgesetzt.
Beispiel
Registerkomponente (n):
Dann sind sie in Ihrem Dom wie folgt verfügbar:
Das Obige wird automatisch durch Ihre Reaktionskomponenten ersetzt.
Sie können dann auch automatisch Eigenschaften (oder Requisiten) an Ihre Komponenten übergeben:
Dies wird
size
als Requisite für Ihre Komponente angezeigt. Es gibt zusätzliche Optionen zum Übergeben anderer Typen wie JSON, Arrays, Ints, Floats usw.quelle
Ich weiß, dass diese Frage schon eine Weile her ist, aber hoffentlich hilft das jemandem.
Wie bei @Cocomico erwähnt, können Sie in der Datei webpack.config.js mehrere Einstiegspunkte für die Anwendung angeben. Wenn Sie nach einem einfachen Webpack-Setup suchen (basierend auf der Idee mehrerer Einstiegspunkte), mit dem Sie statischen Seiten React-Komponenten hinzufügen können, können Sie dies in Betracht ziehen: https://github.com/przemek-nowicki/multi-page -app-mit-reagieren
quelle
Ich schlage vor, Sie werfen einen Blick auf InertiaJS: https://inertiajs.com/
quelle