reactjs - Reactstrap - 在 NavLink 上折叠导航栏点击仅在移动设备上
问题描述
我有一个在桌面上打开并在移动设备上折叠的导航栏。我可以在移动设备上单击 NavbarToggler 来打开导航栏。当我在移动设备上单击 NavLink 时,我希望导航栏再次折叠。我为 NavLink 添加了一个 onclick() 切换功能,该功能在移动设备上运行良好,但现在桌面上的 Navbar 将折叠并在我单击 Navlink 时再次打开后立即折叠。有没有办法让导航栏始终在桌面上打开,并在点击移动设备上的导航链接时折叠?
const [isOpen, setIsOpen] = useState(false);
const toggle = () => setIsOpen(!isOpen);
<Navbar color="light" light expand="md">
<NavbarToggler onClick={toggle} />
<Collapse isOpen={isOpen} navbar>
<Nav className="mr-auto" navbar>
<NavItem>
<NavLink data-toggle="collapse" onClick={() => {history.push("/"); toggle()}}>Home</NavLink>
</NavItem>
</Nav>
</Collapse>
</Navbar>
解决方案
有几种方法可以在 javascript 中完成。您可以评估userAgent
以检查用户正在使用什么设备,或者您可以使用视口/文档尺寸作为切换是否触发的条件。
例如:
const [isOpen, setIsOpen] = useState(false);
const toggle = () => setIsOpen(!isOpen);
const mobileToggle = () => {
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
setIsOpen(!isOpen);
};
};
<Navbar color="light" light expand="md">
<NavbarToggler onClick={toggle} />
<Collapse isOpen={isOpen} navbar>
<Nav className="mr-auto" navbar>
<NavItem>
<NavLink data-toggle="collapse" onClick={() => {history.push("/"); mobileToggle()}}>Home</NavLink> {/* <---- change this to mobileToggle too*/}
</NavItem>
</Nav>
</Collapse>
</Navbar>
推荐阅读
- c# - 如何使用 EPS_EXT_ProfileSearchRQ 获取 Sabre Traveler Profiles 列表
- c# - C# Selenium 等到元素显示等于无
- python - 如何修复IndexError:尝试将csv文件拆分为字典时列表索引超出范围?
- c++ - 如何修复:使用 exec 时 sqlite 3 中的错误 21?cpp
- for-loop - 架构中的循环问题 - vhdl。在体系结构中增加循环(不是 tb 代码)
- php - 检测多部分表单帖子
- spring - Spring in action 5-第3章
- vba - 如何编写一个 CATIA 宏,该宏在图纸中搜索一组文本并替换它们
- python - numpy.einsum的优化方案
- reactjs - 如何将 Geojson 添加到 React-Native-Maps?