Вот пример работающей маршрутизации в моем приложении, где:
<AuthProvider />
используется в нескольких местах внутри <AuthRoute />
компонентов. <AuthRoute />
- это просто обёртка вокруг <Route />
компонента, который делает логи c, связанные с аутентификацией пользователя
...
<Router history={history}>
<AuthProvider>
<Switch>
<Route path='/' exact component={HomePage} />
<AuthRoute path='/account' exact component={MyAccount} />
...
<Route path='*' exact component={NotFound} />
</Switch>
</AuthProvider>
</Router>
...
Теперь, когда мне больше не нравятся простые красивые рабочие приложения, я представил что-то для пользователей, чтобы использовать токены. Поэтому в обновленной версии параллельная маршрутизация представлена следующим образом:
...
<Router history={history}>
<TokenProvider>
<Switch>
<TokenRoute path='/blabla' exact component={TokenizedStuff} />
</Switch>
</TokenProvider>
<AuthProvider>
<Switch>
<Route path='/' exact component={HomePage} />
<AuthRoute path='/account' exact component={MyAccount} />
...
<Route path='*' exact component={NotFound} />
</Switch>
</AuthProvider>
</Router>
...
Проблема При посещении маршрута /blabla
отображается <TokenizedStuff />
, а также <NotFound />
.
Я подумал, что это может быть из-за того, что есть два нижних уровня <Switch />
, поэтому я поднял их следующим образом:
...
<Router history={history}>
<Switch>
<TokenProvider>
<TokenRoute path='/blabla' exact component={TokenizedStuff} />
</TokenProvider>
<AuthProvider>
<Route path='/' exact component={HomePage} />
<AuthRoute path='/account' exact component={MyAccount} />
...
<Route path='*' exact component={NotFound} />
</AuthProvider>
</Switch>
</Router>
...
Это теперь исправило вышеуказанную проблему, но создало еще одну проблему . Типичный!
Теперь посещение /account
маршрута ничего не делает. Изучив React devTools, я обнаружил, что оно разбирает дерево компонентов на <TokenProvider />
и останавливается там.
Я мог бы объединить маршруты в один файл маршрутизации и обернуть его несколькими провайдерами, чтобы проверить работу и работу это, но я бы предпочел держать его в чистоте и читаемом для других членов команды сейчас и присоединиться в будущем.
Буду очень признателен за помощь.