How to open a new page from the navigation menu with react-router-dom (ReactJS)

Viewed 53

When I select a page through the navbar the page loads below the first page. I want when I open a different page through the navbar, only that page opens and not below the first page.

import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
    function App() {
      return (
        <Router>
          <div>
            <div className="App">
              <img src={header} className="Header-Image" alt="header" />
              <Navbar collapseOnSelect expand="lg" bg="dark" variant="dark">
                <Container>
                  <Navbar.Brand href={"/"}>Далгъчев Транс ЕООД</Navbar.Brand>
                  <Navbar.Toggle aria-controls="responsive-navbar-nav" />
                  <Navbar.Collapse id="responsive-navbar-nav">
                    <Nav className="me-auto">
                      <Nav.Link href="/">Начало</Nav.Link>
                      <Nav.Link href="/Logistic">Логистика</Nav.Link>
                      <NavDropdown title="Услуги" id="collasible-nav-dropdown">
                        <NavDropdown.Item href="#action/3.1">Автомобилен транспорт</NavDropdown.Item>
                        <NavDropdown.Item href="#action/3.2">
                          Въздушен транспорт
                        </NavDropdown.Item>
                        <NavDropdown.Item href="#action/3.3">Железопътен транспорт</NavDropdown.Item>
                        <NavDropdown.Item href="#action/3.4">Контейнерен транспорт</NavDropdown.Item>
                        <NavDropdown.Item href="#action/3.5">Транспорт със собствени автомобили</NavDropdown.Item>
                      </NavDropdown>
                      <Nav.Link href="#writeus">Заявки</Nav.Link>
                      <Nav.Link href="#contacts">Контакти</Nav.Link>
                    </Nav>
                  </Navbar.Collapse>
                </Container>
              </Navbar>

      <Routes>
          <Route path="/Logistic" element={<Logistic />} />
        </Routes>
      </div>
    </Router>
  );
}

function Logistic() {
  return <h2>Logistic</h2>;
}

export default App;

Result:

After

1 Answers

I want my front page to be content in App, second page to be Logistic.

Abstract the App nav elements into a component rerendered by a rout on the "/" path.

Example:

import { BrowserRouter as Router, Routes, Route } from "react-router-dom";

const Nav = () => (
  <>
    <img src={header} className="Header-Image" alt="header" />
    <Navbar collapseOnSelect expand="lg" bg="dark" variant="dark">
      <Container>
        ...
      </Container>
    </Navbar>
  </>
);

function App() {
  return (
    <Router>
      <div>
        <div className="App">
          <Routes>
            <Route path="/Logistic" element={<Logistic />} />
            <Route path="/" element={<Nav />} />
          </Routes>
        </div>
      </div>
    </Router>
  );
}
Related