在路线更改时更改导航栏的样式
Change the style of navbar on route change
我正在使用此代码更改导航栏在路由到不同页面时的样式。
但是,如果我使用下面的代码,页面会因为重新呈现而变得无响应。如果我在 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>
</>
);
您需要 setActive,但更重要的是位置作为 useEffect 的依赖项
React.useEffect(() => {
if ((location.pathname === "/Catalogues") || (location.pathname === "/About")) {
setActive(true);
}
}, [location, setActive]);
编辑:在本地状态下激活似乎非常不必要
你可以像这样简单地设置一个常量
const isActive = (location.pathname === "/Catalogues") || (location.pathname === "/About");
然后删除useEffect和useState
您不一定要使用 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>
</>
);
我正在使用此代码更改导航栏在路由到不同页面时的样式。
但是,如果我使用下面的代码,页面会因为重新呈现而变得无响应。如果我在 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>
</>
);
您需要 setActive,但更重要的是位置作为 useEffect 的依赖项
React.useEffect(() => {
if ((location.pathname === "/Catalogues") || (location.pathname === "/About")) {
setActive(true);
}
}, [location, setActive]);
编辑:在本地状态下激活似乎非常不必要 你可以像这样简单地设置一个常量
const isActive = (location.pathname === "/Catalogues") || (location.pathname === "/About");
然后删除useEffect和useState
您不一定要使用 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>
</>
);