Почему <Link>и <Redirect>не запускают обновления state.router в подключенном-реагирующем маршрутизаторе? - PullRequest
1 голос
/ 27 июня 2019

Посмотрев на различные пакеты, чтобы объединить избыточность с реакцией-маршрутизатором, показалось, что подключенный-реакция-маршрутизатор был самым популярным активно поддерживаемым выбором.

Я настроил его почти так же, как в документы , с одним исключением, описанным ниже.

Проблема, с которой я столкнулся, заключается в том, что реактивный маршрутизатор <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 проходили.]

Я надеюсь, что вы можете помочь!

1 Ответ

0 голосов
/ 29 июня 2019

Ack! Просматривая закрытые выпуски в репозитории Github, я вижу, что я оставил свои теги <BrowswerRouter>.

  • Оберните вашу маршрутизацию реакции-маршрутизатор v4 / v5 с ConnectedRouter и передайте объект history в качестве пропеллера. Не забудьте удалить любое использование BrowserRouter или NativeRouter как оставить это в завещании причина проблемы синхронизация состояния.
...