Есть ли способ не перезагружать все тело html с помощью маршрутизаторов React?

#javascript #html #reactjs #react-router-dom #react-bootstrap

#javascript #HTML #reactjs #react-router-dom #реагировать-bootstrap #react-bootstrap

Вопрос:

Мой проект React App.js файл имеет маршруты, подобные таким:

 <div>
        <Background />
        <Navbarr />
        <Switch>
          <Route path="/" component={Home} exact />
          <Route path="/news" component={News} />
          <Route path="/reserve" component={Reserve} />
          <Route path="/admin" component={Admin} />
        </Switch>
</div>
  

В моем компоненте Navbarr у меня есть ссылки, которые задают маршруты, например:

 <Nav.Link
    href="/news"
    name="news"
    active={active === "/news"}
    onClick={() => setActive("/news")} 
>
News
</Nav.Link>
  

Когда я нажимаю на любую из ссылок, я бы хотел, чтобы это просто изменило компонент в моем <Switch>. Вместо этого, похоже, перезагружается все тело html (мой фоновый компонент мигает, даже если он имеет ту же картинку).

Есть ли способ сделать это?

Ответ №1:

Вы можете использовать react-router-dom ‘s Link и использовать to prop вместо href использования маршрутизации на стороне клиента

 import { Link } from "react-router-dom";

<Link
    to="/news"
    name="news"
    active={active === "/news"}
    onClick={() => setActive("/news")} 
>
News
</Link>
  

В качестве альтернативы вы можете использовать as поддержку React-bootstrap

 import { Link } from "react-router-dom";

<Nav.Link
  as={Link} // --> render as react-router-dom Link
  to="/news"
  name="news"
  active={active === "/news"}
  onClick={() => setActive("/news")}
>
  News
</Nav.Link>
  

Комментарии:

1. Именно то, что я искал. Спасибо!