【发布时间】:2020-12-13 18:24:31
【问题描述】:
这是一个代码框https://codesandbox.io/s/recursing-rhodes-ffcmc?file=/src/components/Navbar.js:792-856
现在它只是改变了路线,但导航背景颜色保持不变。
所以,我有这个导航栏组件,它可以根据我所在的特定页面更改背景颜色。如果我将导航栏单独添加到每个页面,它工作正常。但是,我最终会重复大量代码。
这是我原来的设置
--pages
Home.js
About.js
Contact.js
这是我在主页上切换移动菜单打开和关闭的功能
const Home = () => {
const [isOpen, setIsOpen] = useState(false);
const toggle = () => {
setIsOpen(!isOpen);
};
return (
<>
<Dropdown isOpen={isOpen} toggle={toggle} />
<Navbar toggle={toggle} />
<h1>Home Page</h1>
</>
);
};
export default Home;
现在我的问题是这被硬编码到我的 Home.js 文件中,所以如果我希望我的导航栏和下拉菜单在任何其他页面上工作,我必须复制并粘贴完全相同的组件 + 函数来打开/关闭移动菜单。
如果我尝试在 App.js 上添加它,以便它显示在每个页面上,那么这就是我的问题发生并且我必须更改导航栏背景的功能停止工作的时候
function App() {
const [isOpen, setIsOpen] = useState(false);
const toggle = () => {
setIsOpen(!isOpen);
};
return (
<>
<Dropdown isOpen={isOpen} toggle={toggle} />
<Navbar toggle={toggle} />
<Switch>
<Route path='/' exact component={Home} />
<Route path='/about' component={About} />
<Route path='/contact' component={Contact} />
</Switch>
</>
);
}
export default App;
这是我的函数,它根据我的 Navbar.js 中的窗口位置路径名更改导航栏
const Navbar = ({ toggle }) => {
const [navbar, setNavbar] = useState(false);
useEffect(() => {
if (window.location.pathname) {
setNavbar(window.location.pathname);
}
console.log(window.location.pathname);
}, []);
那么为什么当我在每个页面中手动硬编码导航栏时,我的导航栏会改变背景颜色,但是当我尝试将它添加到我的 App.js 时它停止工作?
每当我将导航栏添加到App.js 文件时,我获取window.location.pathname 的功能似乎停止工作,但如果我手动将导航栏添加到我的 pages/Home.js 文件中,它完全可以正常工作。这是为什么呢?
【问题讨论】:
标签: reactjs react-router