【发布时间】:2021-06-05 22:45:10
【问题描述】:
CODESANDBOX 链接:https://codesandbox.io/s/cranky-paper-qucsp
如果需要,我很乐意发布更多代码。
我正在学习 React,我有一个简单的页面设置,其中路由设置为其他组件。这些标签有一个 className 集并具有悬停/焦点状态。当我单击其中一个标签以加载另一个组件(页面刷新)时,这些标签的悬停/焦点状态将保持不变,直到我“单击”其他地方为止。我什至可以在其他标签上激活悬停状态,而原来的标签仍然像悬停在上面一样。有人可以告诉我为什么会发生这种情况/如何解决它/链接我解释它的文档吗?
再次,如果相关,我很乐意提供任何其他代码。谢谢大家。
下面是一个简单的 Nav.js 和 App.js 来展示我正在使用的内容。导航具有标签和标签(用于外部网站),并且悬停状态“粘”在两个标签上。
function App() {
return (
<Router>
<div className="main-container">
<Nav />
<Switch>
<Route path="/" exact component={Home} />
<Route path="/About" component={About} />
<Route path="/Projects" component={Projects} />
</Switch>
</div>
</Router>
);
}
function Nav() {
return (
<nav>
<Link to="/About" className="nav-link"><li>About</li></Link>
<a href="randomlink.com" className="nav-link"target="_blank">link1</a>
<Link to="/" className="homeLink"><li>Home</li></Link>
<a href="randomlink.com" className="nav-link" target="_blank">link3</a>
<Link to="/Projects" className="nav-link"><li>Projects</li></Link>
</nav>
);
}
【问题讨论】:
-
您能否也包括应用于这些“链接”的 CSS?你是渲染来自 react-router-dom 的
Link组件,还是你重命名的NavLink组件?您能否尝试创建一个 running 代码框来重现我们可能在其中进行调试的这个问题? -
@DrewReese 我在帖子中添加了一个 CodeSandbox 链接以供参考。 codesandbox.io/s/cranky-paper-qucsp
-
好吧,我在下面回答,然后重新检查了您的代码框和 TBH,我似乎无法重现您所描述的问题,这让我相信我误解了您所说的问题(考虑到我也觉得我的回答不够充分)。我能想到的最接近的是这种情况:用户点击链接,它具有焦点并设置样式,然后用户将鼠标悬停在另一个链接上,它也设置了样式。与焦点的链接将保持它,直到焦点移动到其他地方。你能更清楚地解释问题是什么吗?提供一组步骤以在您的沙盒中重现它?
-
@DrewReese 感谢您对 Reese 的调查。 homeLink 上的第二个下划线是故意的。我注意到 Samrat 在下面做出了回应,并建议我使用的是导致问题的焦点状态。我想我不记得上次将焦点状态与悬停状态匹配是什么时候了,所以我忘记了焦点状态的怪癖。 :P 但我会根据您的要求研究 NavLink 组件。谢谢!
-
那是我描述的场景,当您将鼠标悬停在其他元素上时,某些元素保持焦点?如果是这样,那么这就是我对沙盒代码的期望。我刚刚尝试了 Samrat 的建议,并且解耦悬停和焦点样式似乎是您想要的。一般来说,除非您有一个相当自定义的组件并且它具有次优的视觉可访问性,否则您通常希望单独保留焦点样式(为了可访问性)。浏览器通常已经很好地指示了对与之交互的项目的关注。