У меня есть языковой редуктор с начальным значением локали:
const LanguageReducer = function(
state = { locale: "en", messages: {} },
action = {}
) {
switch (action.type) {
case CHANGE_LANGUAGE_SUCCESS:
...
return state;
default:
return state;
}
};
Начальное значение локали исходит из текущего URL-адреса. Как я могу получить доступ к параметру URL и локали в моем редукторе, чтобы инициализировать локаль? Я использую React-Router v4.
Вы должны содержать свои редукторы в чистоте. Я бы отправил действие инициализации где-нибудь при запуске приложения (скажем, когда монтируется основной компонент) и передал URL-адрес в качестве полезной нагрузки действия.





У вас есть (как минимум) два варианта, в зависимости от ваших потребностей:
1) Самый простой способ — отправить действие с первой страницы, которую загружает ваше приложение, которое использует Route props для передачи параметра URL, который вам нужен, вашему редюсеру. См. эта страница для руководства. Это правильный путь, если вы можете разделить свое состояние Route и состояние остальных приложений.
2) Более сложный метод — использовать промежуточное ПО, такое как подключенный реактивный маршрутизатор, для синхронизации вашего магазина и React Router. Это даст вам свойство router в вашем магазине (содержащее историю, местоположение и т. д.), которое вы можете прочитать, когда вам нужно.
Когда компонент монтируется, веб-службы работают на основе неустановленной локали. Так что слишком поздно отправлять действие локали.
Доступно ли в редукторе для инициализации локали? Могу ли я использовать его в рендеринге на стороне сервера?
вместо доступа к
urlв редукторе вы можете передатьlocaleв качестве полезной нагрузки, куда вы отправляетеaction