Измените стиль навигационной панели при изменении маршрута

#reactjs #rendering #use-effect #tailwind-css

Вопрос:

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

Но если я использую приведенную ниже кодовую страницу, она перестает отвечать из-за повторного рендеринга. Если я передам пустое [] или передам местоположение в качестве второго элемента в useEffect, то это не сработает.

Так какова же альтернатива этому?

 const [active, setActive] = React.useState(false);
const location = useLocation();

React.useEffect(() => {
  if (location.pathname === "/Catalogues" || location.pathname === "/About") {
    setActive(true);
  }
});
return (
  <>
    <nav className={active ? "bg-white" : "bg-black"}>
      <div>.....</div>
    </nav>
  </>
);
 

Ответ №1:

Вам нужно установить активное, но что более важно, местоположение в зависимости от эффекта использования

  React.useEffect(() => {
            if ((location.pathname === "/Catalogues") || (location.pathname === "/About")) {
                setActive(true);
            }
        }, [location, setActive]);
 

Редактировать: кажется очень ненужным иметь активность в локальном состоянии
, вы можете просто установить константу следующим образом

  const isActive = (location.pathname === "/Catalogues") || (location.pathname === "/About");
 

Затем удалите эффект использования и состояние использования

Ответ №2:

Вам не обязательно использовать state эту функциональность:

 const location = useLocation();
let active = false;

if (location.pathname === "/Catalogues" || location.pathname === "/About") {
  active = true;
}

return (
  <>
    <nav className={active ? "bg-white" : "bg-black"}>
      <div>.....</div>
    </nav>
  </>
);