Я играл с React, и пока он мне очень нравится. Я создаю приложение с помощью NodeJS и хотел бы использовать React для некоторых интерактивных компонентов в приложении. Я не хочу делать это одностраничным приложением.
Я еще не нашел в сети ничего, что отвечало бы на следующие вопросы:
Как разделить или связать компоненты React в многостраничном приложении?
В настоящее время все мои компоненты находятся в одном файле, хотя я могу никогда не загрузить их в некоторых разделах приложения.
Пока я пытаюсь использовать условные операторы для визуализации компонентов, ища идентификатор контейнера, в котором будет отображаться React. Я не на 100% уверен, что лучше всего использовать с React. Это выглядит примерно так.
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')
);
}
Я все еще читаю документацию и еще не нашел то, что мне нужно для многостраничного приложения.
Заранее спасибо.
источник
render
правильный компонент вscript
блоке.Ответы:
В настоящее время я делаю нечто подобное.
Приложение не является полноценным приложением React, я использую React для динамических материалов, например CommentBox, который является автарком. И может быть включен в любой точке со специальными параметрами ..
Однако все мои дополнительные приложения загружаются и включаются в один файл
all.js
, поэтому он может кэшироваться браузером на всех страницах.Когда мне нужно включить приложение в шаблоны SSR, мне просто нужно включить DIV с классом «__react-root» и специальным идентификатором (имя приложения React, которое будет отображаться)
Логика действительно проста:
редактировать
Поскольку webpack отлично поддерживает разделение кода и отложенную загрузку, я подумал, что имеет смысл включить пример, в котором вам не нужно загружать все свои приложения в один пакет, а разбивать их и загружать по запросу.
источник
create react app
дает вам несколько простых инструментов для созданияbundle.js
. Итак, цель моего ответа - использовать одноbundle.js
и то же и использовать его на нескольких сайтах SSR и загрузить множество различных приложений React на одну страницу. Извините, если мой ответ не соответствует вашим потребностям, не стесняйтесь создавать новый пост и описывать то, что вы пытаетесь сделать, я постараюсь вам помочь.Вы можете указать несколько точек входа для приложения в файле webpack.config.js:
тогда вы можете иметь в своей папке src три разных файла html с соответствующими файлами js (например, для page1):
Файл JavaScript:
Затем для каждой отдельной страницы могут быть загружены различные компоненты React.
источник
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.
Итак, следует ли обновить этот образец для webpack 4+?Я создаю приложение с нуля и учусь по ходу дела, но я думаю, что вам нужен React-Router . React-Router сопоставляет ваши компоненты с определенными URL-адресами. Например:
В случае поиска "термин" доступен как свойство в AnimalSearchBox:
Попробуйте сами. Это руководство помогло мне лучше понять эту и другие связанные темы.
Исходный ответ следует:
Я нашел свой путь сюда в поисках того же ответа. Посмотрите, вдохновляет ли вас этот пост. Если ваше приложение чем-то похожее на мое, в нем будут области, которые очень мало изменяются и варьируются только в основном теле. Вы можете создать виджет, который должен отображать другой виджет в зависимости от состояния приложения. Используя архитектуру потока, вы можете отправить действие навигации, которое изменяет состояние, на которое переключается ваш основной виджет, эффективно обновляя только тело страницы.
Я сейчас пытаюсь это сделать.
источник
Router
работать так же, как в одностраничном приложении?Вы используете CMS? Им нравится менять URL-адреса, что может нарушить работу вашего приложения.
Другой способ - использовать что-то вроде React Habitat .
С его помощью вы можете регистрировать компоненты, и они автоматически становятся доступными для dom.
пример
Зарегистрируйте компонент (ы):
Тогда они будут доступны в вашем доме следующим образом:
Вышеуказанное будет автоматически заменено вашими реагирующими компонентами.
Затем вы можете автоматически передавать свойства (или реквизиты) своим компонентам:
Это станет
size
опорой для вашего компонента. Есть дополнительные параметры для передачи других типов, таких как json, array, int, float и т. Д.источник
Я знаю, что этот вопрос давно не задавали, но, надеюсь, это кому-то поможет.
Как упоминалось в @Cocomico, вы можете указать несколько точек входа для приложения в файле webpack.config.js. Если вы ищете простую настройку Webpack (основанную на идее нескольких точек входа), которая позволяет добавлять компоненты React на статические страницы, вы можете рассмотреть возможность использования этого: https://github.com/przemek-nowicki/multi-page -app-с-реагируют
источник
Предлагаю вам взглянуть на InertiaJS: https://inertiajs.com/
источник