Когда вы выполняете фактический сетевой запрос (полная загрузка страницы, например, привязка <a href="/login">Login</a>
или вызов AJAX), браузер связывается с экспресс-приложением, которое, в свою очередь, разрешает URL-адрес и сопоставляет его с функцией.
react-router
маршруты существуют только внутри приложения JS и требуют других способов навигации, вместо HTML-тега <a/>
вы можете использовать <Link/>
реагирующий компонент.
Есть, конечно, программные способы навигации между маршрутами, такие как изменение различных history объектов, предоставленных react-router
основная проблема заключается в том, что приложение-экспресс (сервер) никак не знает о маршрутах реагирования и может иметь собственный набор маршрутов. Хорошей практикой было бы установить маршрутный символ (*) на сервере, который будет запущен для всех запросов и вернет основной html-файл в браузер, браузер, в свою очередь, загрузит приложение реагирования, что позволяет реагирующему маршрутизатору разрешить URL-адрес и отобразить нужный компонент.