Bawiłem się z Reactem i jak dotąd bardzo mi się to podoba. Buduję aplikację za pomocą NodeJS i chciałbym użyć Reacta dla niektórych interaktywnych komponentów w całej aplikacji. Nie chcę, aby była to aplikacja jednostronicowa.
Nie znalazłem jeszcze w sieci niczego, co odpowiadałoby na następujące pytania:
Jak rozdzielić lub połączyć moje komponenty React w wielostronicową aplikację?
Obecnie wszystkie moje komponenty znajdują się w jednym pliku, chociaż mogę ich nigdy nie załadować w niektórych sekcjach aplikacji.
Do tej pory próbuję używać instrukcji warunkowych do renderowania komponentów, wyszukując identyfikator kontenera, w którym zrenderuje React. Nie jestem w 100% pewien, jakie są najlepsze praktyki w React. Wygląda mniej więcej tak.
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')
);
}
Wciąż czytam dokumentację i nie znalazłem jeszcze tego, czego potrzebuję do aplikacji wielostronicowej.
Z góry dziękuję.
źródło
render
właściwy komponent wscript
bloku.Odpowiedzi:
Obecnie robię coś podobnego.
Ta aplikacja nie jest pełną aplikacją React, używam Reacta do dynamicznych rzeczy, takich jak CommentBox, który jest autark. I może zostać uwzględniony w dowolnym punkcie ze specjalnymi parametrami.
Jednak wszystkie moje aplikacje podrzędne są ładowane i umieszczane w jednym pliku
all.js
, więc przeglądarka może je buforować na różnych stronach.Kiedy muszę dołączyć aplikację do szablonów SSR, wystarczy, że dołączę DIV z klasą „__react-root” i specjalnym identyfikatorem (nazwa renderowanej aplikacji React)
Logika jest naprawdę prosta:
Edytować
Ponieważ pakiet internetowy doskonale obsługuje dzielenie kodu i LazyLoading, pomyślałem, że sensowne jest zawarcie przykładu, w którym nie musisz ładować wszystkich aplikacji w jednym pakiecie, ale dziel je i ładuj na żądanie.
źródło
create react app
zapewnia proste narzędzia do tworzeniabundle.js
. Tak więc celem mojej odpowiedzi jest użycie tego samegobundle.js
i użycie go w wielu witrynach SSR oraz załadowanie wielu różnych aplikacji React na jednej stronie. Przepraszam, jeśli moja odpowiedź nie odpowiada Twoim potrzebom, nie krępuj się stworzyć nowego posta i opisać co próbujesz zrobić, postaram się Ci pomóc.W pliku webpack.config.js możesz podać kilka punktów wejścia dla aplikacji:
wtedy możesz mieć w swoim folderze src trzy różne pliki html z odpowiadającymi im plikami js (przykład dla page1):
Plik JavaScript:
Następnie dla każdej strony można załadować różne komponenty Reacta.
źródło
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.
Czy zatem ta próbka powinna zostać zaktualizowana dla pakietu webpack 4+?Buduję aplikację od podstaw i uczę się na bieżąco, ale myślę, że to, czego szukasz, to React-Router . React-Router mapuje twoje komponenty na określone adresy URL. Na przykład:
W przypadku wyszukiwania „termin” jest dostępny jako właściwość w AnimalSearchBox:
Wypróbuj to. Ten samouczek jest tym, który dał mi przewagę, jeśli chodzi o zrozumienie tego i innych powiązanych tematów.
Oryginalna odpowiedź jest następująca:
Trafiłem tutaj, szukając tej samej odpowiedzi. Sprawdź, czy ten post Cię inspiruje. Jeśli twoja aplikacja jest podobna do mojej, będzie miała obszary, które zmieniają się bardzo nieznacznie i różnią się tylko w głównej części. Możesz stworzyć widżet, którego zadaniem jest renderowanie innego widżetu na podstawie stanu aplikacji. Korzystając z architektury flux, możesz wywołać akcję nawigacji, która zmienia stan, na który włącza się twój widget body, skutecznie aktualizując tylko treść strony.
To podejście, które teraz próbuję.
źródło
Router
działać tak samo, jak w aplikacji z pojedynczą stroną?Czy korzystasz z CMS? Zwykle lubią zmieniać adresy URL, które mogą spowodować uszkodzenie aplikacji.
Innym sposobem jest użycie czegoś takiego jak React Habitat .
Dzięki niemu możesz zarejestrować komponenty i automatycznie zostaną one ujawnione w domenie.
Przykład
Zarejestruj składnik (i):
Wtedy są one dostępne w Twoim domu w ten sposób:
Powyższe zostaną automatycznie zastąpione komponentami reagującymi.
Następnie możesz automatycznie przekazywać właściwości (lub rekwizyty) również do swoich komponentów:
To ujawni się
size
jako rekwizyt dla twojego komponentu. Istnieją dodatkowe opcje przekazywania innych typów, takich jak json, tablice, int, zmiennoprzecinkowe itp.źródło
Wiem, że minęło trochę czasu, odkąd zadano to pytanie, ale mam nadzieję, że to komuś pomoże.
Jak wspomniał @Cocomico, możesz podać kilka punktów wejścia dla aplikacji w pliku webpack.config.js. Jeśli szukasz prostej konfiguracji Webpacka (opartej na idei wielu punktów wejścia), która pozwala dodawać komponenty Reacta do stron statycznych, możesz rozważyć użycie tego: https://github.com/przemek-nowicki/multi-page -app-with-respond
źródło
Proponuję przyjrzeć się InertiaJS: https://inertiajs.com/
źródło