React-router: запретить перенаправление в общедоступном макете

#reactjs #react-router

#reactjs #реагировать-маршрутизатор

Вопрос:

Я унаследовал некоторый код, который имеет общедоступный и приватный макет. Мне нужна целевая страница в общедоступном макете, которую можно использовать для получения информации из внешнего API для пользователей, у которых нет прав на вход.

Я добавил компонент переключения и маршрут к общедоступному макету, и это работает, за исключением того, что страница перенаправляется почти сразу после обработки. Как мне предотвратить это перенаправление?

Редактировать: я подозреваю, что функция перенаправления внутри маршрута «/» запускается немедленно, несмотря на то, что она не находится на соответствующем маршруте. Мое временное решение состоит в том, чтобы переместить его внутрь другого компонента, чтобы эта функция запускалась при загрузке, но это может быть не лучшим способом исправить это. Есть еще какие-нибудь предложения?

Вот App.js:

 function App(props) {

  if (!props.isAuthenticated amp;amp; props.attemptAutoAuthenticate amp;amp; !props.isAuthenticating ){
    props.doAttemptAutoAuth()
  }

  var domElement = null;
  if(!props.isAuthenticated amp;amp; props.attemptAutoAuthenticate) {
    domElement = <Loader />
  }
  else if(props.isAuthenticated) {
    domElement = <PrivateLayout {...props} />
  } else {
    domElement = <PublicLayout {...props} />
  }

  return (
    <div className="App">
      {domElement}
    </div>
  );
}

export default App;
 

Общедоступный Layout.js:

 function Layout(props) {
  const { doLogout } = props;

  return (
    <section className="section is-medium">
      <div className="container">
        {
          props.loginError === "USER_MISSING_PERMISSIONS" ?
          <div>
            <ErrorBlock messageId="Auth.error.missingPermissions" isVisible={true}/>
            <NavLink to="#" tabIndex="1" onClick={() => doLogout()}>
              <FormattedMessage id="signout.actions.submit" />
            </NavLink>
          </div> :
          <Switch>
            <Route path="/public-route-that-should-be-visible">
              <ComponentThatShouldBeVisible />
            </Route>
            <Route exact path="/">
              { redirector.redirectToAuthLogin() }
            </Route>
            <Route path="*">
              <Redirect to="/"/>
            </Route>d
          </Switch>
        }
      </div>
    </section>
  )
}

export default Layout;
 

Component.js:

 const Component = (props) => {
  \ props amp; logic amp; stuff

  if (!props){
    return "Missing required parameters."
  }
  if (success){
    return <div>Success!</div>
  }
  if (fail){
    return  <div>There was an error</div>
  }
  return <Loader/>
};