Как настроить реакцию на частный маршрут? - PullRequest
0 голосов
/ 07 апреля 2020

Я не могу правильно настроить маршрут. Компонент магазина не отображается

Структура компонента:

enter image description here

index.tsx:

const Index: FC = () => {
  const SignIn = props => (
    <LazyLoad
      component={React.lazy(() => import('./modules/auth/containers/SignIn'))}
      {...props}
    />
  )
  return (
    <Provider store={store}>
      <EmotionThemeProvider>
        <ThemeProvider theme={theme}>
          <Router>
            <Switch>
              <PrivateRoute exact path='/' component={Main} />
              <Route path='/signin' component={SignIn} />
            </Switch>
          </Router>
        </ThemeProvider>
      </EmotionThemeProvider>
    </Provider>
  )
}

PrivateRoute.tsx :

export const PrivateRoute = ({ component: Component, ...rest }) => (
  <Route
    {...rest}
    render={props =>
      localStorage.getItem('accessToken') ? (
        <Component {...props} />
      ) : (
        <Redirect
          to={{ pathname: '/signin', state: { from: props.location } }}
        />
      )
    }
  />
)

Main.tsx:

const Main: FC = () => (
  <App>
    <Switch>
      {routes.map(route => (
        <Route
          key={route.path}
          path={route.path}
          exact={route.exact}
          component={route.component}
        />
      ))}
    </Switch>
  </App>
)

Shop.tsx:

const Shop = () => {
  const [, setCollapsed] = useContext(SidebarContext)

  useEffect(() => {
    setCollapsed(true)
  }, [])

  return <div>Shop</div>
}

rout.ts:

export const routes = [
  {
    path: '/shop',
    key: 'market',
    component: props => (
      <LazyLoad
        component={React.lazy(() => import('./modules/shop/pages/Shop'))}
        {...props}
      />
    ),
  },
  {
    path: '/',
    exact: true,
    component: () => <div>main</div>,
    skip: true,
  },
]

Когда Я вошел в систему, открывается главная страница, но после того, как я go в магазин, она больше не рендерится. Где моя ошибка? Я попытался удалить «точный» из PrivateRoute, затем магазин открывается, но я получил эту ошибку:

Uncaught Ошибка: превышена максимальная глубина обновления. Это может произойти, когда компонент повторно вызывает setState внутри componentWillUpdate или componentDidUpdate. React ограничивает количество вложенных обновлений для предотвращения бесконечных циклов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...