Маршрутизатор можно вызывать двумя разными способами, в зависимости от того, происходит ли навигация на клиенте или на сервере. Он настроен для работы на стороне клиента. Ключевым параметром является второй метод run , местоположение.
Когда вы используете компонент React Router Link, он блокирует навигацию браузера и вызывает переход. Чтобы сделать клиент- боковая навигация. Вы используете HistoryLocation, поэтому он использует API истории HTML5 для завершения иллюзии навигации, моделируя новый URL-адрес в адресной строке. Если вы используете старые браузеры, это не сработает. Вам нужно будет использовать компонент HashLocation.
Когда вы нажмете обновление, вы обойдете весь код React и React Router. Сервер получает запрос для /joblist
, и он должен что-то вернуть. На сервере вам необходимо передать путь, запрошенный методу run
, чтобы он отображал правильный вид. Вы можете использовать ту же карту маршрутов, но вам, вероятно, потребуется другой вызов Router.run
. Как указывает Чарльз, вы можете использовать переписывание URL, чтобы справиться с этим. Другим вариантом является использование сервера node.js для обработки всех запросов и передачи значения пути в качестве аргумента местоположения.
В выражении, например, это может выглядеть так:
var app = express();
app.get('*', function (req, res) { // This wildcard method handles all requests
Router.run(routes, req.path, function (Handler, state) {
var element = React.createElement(Handler);
var html = React.renderToString(element);
res.render('main', { content: html });
});
});
Обратите внимание, что путь запроса передается в run
. Для этого вам понадобится серверный механизм просмотра, с помощью которого вы можете передать отображаемый HTML. Существует ряд других соображений, использующих renderToString
и в запуске React на сервере. После того, как страница будет отображаться на сервере, когда ваше приложение загрузится в клиенте, оно снова отобразится, обновив HTML-код на стороне сервера, если необходимо.