TLDR:
Вы не ошиблись. Один и тот же файл HTML используется для «подачи» (или «рендеринга») разного контента для разных маршрутов. Вам, вероятно, нужно дважды проверить код компонента и маршрутизатора, но идея <Route path="/home" exact component={Home} />
верна.
Мой длинный и скучный ответ
Немного истории и контекста:
Как вы упоминали, пару лет go обычным способом создания веб-сайта было создание сервера с некоторым внутренним кодом, который не только обрабатывал бы, какая страница HTML должна отображаться, но и какие данные будут отображаться. Большая часть операций будет выполняться в бэкэнде, а интерфейс был заинтересован только в том, чтобы отображать данные приятным образом.
С ростом Javascript и его популярностью в операциях стало выполняться больше операций. внешний интерфейс. И по мере того, как браузеры становятся все более мощными, с Javascript можно делать все больше и больше вещей. Сортировка таблиц, фильтрация данных и AJAX запросы являются некоторыми примерами.
Люди начали изменять DOM (это означает, что они использовали Javascript вместо языка бэкэнда, чтобы изменить, какие данные должны отображаться и как они должны отображаться.)
Одностраничное приложение (IMHO):
Основная идея одностраничного приложения (SPA) заключалась в улучшении этого процесса. Возьмите ReactJS например. Концепция этого (по моим собственным словам):
«Как я могу быстро изменить отображаемые данные, используя меньшую вычислительную мощность и создавая лучший опыт для пользователя?»
И ответ (также в моих собственных словах) был:
"давайте обновим только те элементы экрана, которые необходимо обновить. Все остальное останется прежним, поэтому мы не будем Мне не нужно повторно отображать его. "
Для меня это означает, что многие приложения теперь могут использовать ReactJS (или Vue, Angular, et c) быть более мощным и удобным для пользователя. Но это также означает, что не каждое приложение должно быть построено как SPA. Для меня все еще есть много действительного использования в «традиционном» приложении, где бэкэнд все еще имеет большой контроль над данными.
Наконец, вы отвечаете:
Тем не менее, Я бы сказал, что первое, о чем стоит подумать, если вам действительно нужен SPA;)
Если вы это сделаете, я вижу два способа контролировать, какие данные должны отображаться:
Во-первых, с условным рендером "Pure":
Это означает большой if
в вашем Javascript. Для простоты, вот пример:
var openMenu = "Home"
if (openMenu == "Home") {
showHomePage()
} else if (openMenu == "About") {
showAboutPage()
}
function showHomePage() {
return <HomeComponent />
}
Во-вторых, с управлением маршрутизатором
Используя react-router
или подобные вещи, вы на самом деле «перемещают» ваш оператор Javascript if
в URL вместо локальной переменной ?
Некоторые люди с этим не согласятся. Использование URL для отображения определенного c содержимого больше нельзя классифицировать как одностраничное приложение , поскольку первоначальная идея состоит в том, чтобы контролировать то, что отображается на экране, через Javascript, а не через URL.
Некоторые люди согласятся, заявив, что различные URL-адреса помогут в SEO, организации и позволят пользователям создавать закладки или делиться ссылками.
В конце вам просто нужно подумать о макете страницы ( или структура) и напишите это в HTML. Затем поместите оператор if
вокруг частей, которые должны измениться. Либо так:
<App>
<Menu />
{(openMenu == "Home") && <Home />}
{(openMenu == "About") && <About />}
<Footer />
</App>
или
<App>
<Menu />
<Router>
<Route path="/home" component={Home} />
<Route path="/about" component={About} />
</Router>
<Footer />
</App>
Надеюсь, что это даст вам немного больше направлений ?