Визуализация боковой панели для некоторых страниц в App.js ReactJS

#reactjs #react-router #react-router-dom

Вопрос:

Я хочу отобразить боковую панель для всех страниц, кроме входа и регистрации. Просто хотел подтвердить, есть ли какой-либо другой оптимальный способ сделать это и управлять страницей 404 в этом сценарии.

 return loading ? (
    <p>loading</p>
  ) : (
    <>
      <Router>
        <div className="app">
          <NavBar />
          <ToastContainer />
          <Switch>
            <Route path={LOGIN_ROUTE} component={LoginPage} exact />
            <Route path={SIGNUP_ROUTE} component={SignupPage} exact />
            <div className="app-container">
              {showSidebar amp;amp; <Sidebar />}
              <div className="app-main">
                <Switch>
                  <Route path={HOME_ROUTE} component={HomePage} exact />
                  <Route
                    path="*"
                    component={() => (
                      <NotFound setShowSidebar={setShowSidebar} />
                    )}
                  />
                </Switch>
              </div>
            </div>
          </Switch>
        </div>
      </Router>
    </>
  );
 

Ответ №1:

Вы можете разделить код конфигурации маршрутизатора на два компонента, один из которых содержит маршруты аутентификации, а другой-домашние маршруты. Таким образом, вы можете включить свою навигационную панель в компонент home. Например,

 // In router.js

<Router>
  <Route path="/auth" component={AuthComponent} exact />
  <Route path="/home" component={HomeComponent} exact />
  <Route path="*" component={() => (<NotFound setShowSidebar=       {setShowSidebar} />)}/>
</Router>

// In AuthComponent

<Router>
  <Route path="/signin" component={SigninComponent} exact />
  <Route path="/signup" component={SignupComponent} exact />
  <Route path="*" component={() => (<NotFound setShowSidebar=       {setShowSidebar} />)}/>
</Router>

// In HomeComponent

<div>
  <Navbar />
  <Router>
  <Route path="/signin" component={SigninComponent} exact />
  <Route path="/signup" component={SignupComponent} exact />
  <Route path="*" component={() => (<NotFound setShowSidebar=       {setShowSidebar} />)}/>
</Router>

</div>