Как вы знаете клиенты взаимодействуют с серверами, для того чтобы с серверов скачивать HTML, CSS и JavaScript файлы.
В одностраничных приложениях (SPA) клиент запрашивает только одну страницу HTML, а также JavaScript и CSS файлы для всего приложения.
Другими словами, сервер передаёт клиенту только одну HTML-страницу, с сопутствующими JavaScript и CSS файлами.
После этого, когда, например, клиент хочет перейти на другую страницу, то вся навигация между страницами выполняется непосредственно на стороне клиента.
С сервера дополнительные HTML-файлы не скачиваются, а всю перерисовку приложения клиент выполняет самостоятельно с помощью JavaScript.
Но при этом при навигации между разными страницами клиент может запрашивать с сервера опциональные данные, которые необходимы для того, чтобы отобразить какую-то визуальную часть приложения, например, список постов пользователя и т.п.
Ключевой момент, что в SPA клиент запрашивает только одну HTML-страницу, а после этого клиент самостоятельно её модифицирует с помощью JavaScript.
Существуют несколько популярных фреймворков и библиотек для создания одностраничных приложений (SPA): React, Angular, Vue, Svelte, Ember, Ruby.
Отметим, что React является библиотекой, а не фреймворком, потому что React отвечает только за визуальную часть одностраничных приложений, но в тоже время является самым популярным среди всех фреймворком и библиотек для создания одностраничных приложений (SPA).
А вот, например, такие фреймворки как Angular или Vueявляются более функциональными и включают в себя много других функций, которые касаются непосредственно работы самого одностраничного приложения (SPA).