Задать вопрос
victorzadorozhnyy
@victorzadorozhnyy

Как сделать редирект с домашнего роута на вложенный React-router 4?

Не могу разобраться как правильно настроить React-router 4 для перенаправления авторизированных пользователей с домашней страницы "/" на вложение "/user" у которого свой роутер
Вот какой у меня корневой роутер
import {
  BrowserRouter as Router, Route, Switch, Redirect,
} from 'react-router-dom'

const logonUser = () => !!JSON.parse(localStorage.getItem(process.env.REACT_APP_LOCAL_STORAGE))

const App = ({ firebase }) => {
  useEffect(() => firebase.onAuthUserListener(... ))
  const authorized = useCallback(() => logonUser(), [])
  return (
    <Router>
      <Grid container justify="center" alignItems="center">
        {/* It's a bag cannot redirect from the landing page cause non stop redirection to /user
          <MyRedirectRoute path={ROUTES.LANDING} authorized={!authorized} component={LandingPage} />
        */}
        <Switch>
// Рутовый роутер не получается сделать защищенным, возникает ошибка
// You tried to redirect to the same route you're currently on: "/user/" и компонент не рендерится
          <Route exact path={ROUTES.LANDING} component={LandingPage} />
          <MyRedirectRoute path={ROUTES.GET_STARTED} authorized={!authorized} component={GetStartedPage} />
// MyRedirect это   
// <Route  exact  {...rest}   render={props => (authorized() ? ( <Redirect to={{  pathname: ROUTES.USER }} />  ) : ( <Component {...props} /> ))  } />
          <MyRedirectRoute path={ROUTES.USER} authorized={authorized} component={UserRouterPage} />
          <Route component={() => 'NoMatch'} />
        </Switch>
      </Grid>
    </Router>
  )
}

В UserRouterPage у меня свой роутер
const UserRouter = ({ match: { path } }) => (
  <Router>
      <Route exact path={`${path}`} component={LanguagePage} />
      <Route exact path={`${path}${ROUTES.LESSON}`} component={Lesson} />
  </Router>
)

Я правильно понимаю, что редирект не видит разницы между / и /user и от этого возникает ошибка?
Как это сделать правильно что бы зарегистрированные пользователи сразу попадали на /user/{компонент Lesson }?
  • Вопрос задан
  • 273 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
victorzadorozhnyy
@victorzadorozhnyy Автор вопроса
Все оказалось просто. в UserRouter не нужно еще раз оборачивать в Router и все работает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы