Посмотрев на различные пакеты, чтобы объединить избыточность с реакцией-маршрутизатором, показалось, что подключенный-реакция-маршрутизатор был самым популярным активно поддерживаемым выбором.
Я настроил его почти так же, как в документы , с одним исключением, описанным ниже.
Проблема, с которой я столкнулся, заключается в том, что реактивный маршрутизатор <Redirect>
выполняет перенаправление, но не обновляет state.router.location
.Codesandbox MNWE здесь .[Редактировать: я сразу после публикации понял, что <Link>
имеет точно такую же проблему, и проиллюстрировал это в небольшая модификация оригинальных кодов и коробки.Извините, было бы яснее, если бы я только начал там, но мне нужно немного поспать!]
В следующем примере есть 3 маршрута.Первый соответствует корню "/".Второй соответствует простым URL-адресам, таким как «/ что-нибудь», а по умолчанию будет соответствовать таким вещам, как «/ что-нибудь / еще».<Where>
- это небольшой компонент, который показывает text
реквизит, а затем показывает state.router.location.pathname
.
<Switch>
<Route exact path="/">
<Where text="Root" />
</Route>
<Route exact path="/:thing">
<Where text="Exact" />
</Route>
<Route>
<Redirect to="/" />
</Route>
</Switch>
Когда вы приедете, вы увидите «Root: /», как и должно быть.Если вы добавите «/ что-нибудь» в адресную строку, вы увидите «Точное: / что-нибудь».Если вы добавите «/ что-нибудь / еще» в адресную строку, адресная строка будет перенаправлена обратно в корень, а <Switch>
вернется в соответствие с корнем, но вместо «Root: /» вы увидите «Root»: /что-нибудь еще".Регистратор подтверждает, что хотя введенные вручную URL-адреса инициируют state
обновления, <Redirect>
этого не делает.
Может быть, я ошибаюсь, полагая, что так и должно быть, но я не вижу, что это задокументировано так или иначеДругой.Я полагаю, что я допустил какую-то ошибку конфигурации?
[Исключение конфигурации, которое я описал, состоит в том, что я не использую combineReducers
в своем приложении, у меня есть один редуктор, который я называю appRootReducer
(которыйпустой в этом примере).Поэтому я написал небольшую оболочку createRootReducer
.Он работает достаточно хорошо, чтобы базовые обновления до state.router
проходили.]
Я надеюсь, что вы можете помочь!