如何样式 :访问的<a>元素使用 React 的 onClick= " " 而不是 href= " " ?


  • 网站有一个表
  • 在表中,我从Firestore获取数据(并将这些数据显示给用户(。表中的一些单元格可能链接到网站上的其他页面(这些页面也被实现为表(

由于有很多信息,用户可能会混淆他们关注了哪些链接,哪些链接没有接触;因此,当鼠标悬停在用户已经访问过的链接上时,我想用不同的颜色进行标记。

默认情况下,我的链接颜色是黑色,如果你将鼠标悬停在链接上,它会亮起蓝色。我希望用户访问的链接以不同的颜色突出显示。

下面是我如何编写路线的示例

export default function DeviceCell({ device }) {
const router = useNavigate()
return (
<TableRow>

<TableCell>
<a className="page-links" onClick={() => router(device.id)}>List of users</a>
</TableCell>
</TableRow>
);
}

还有我的.css文件

.page-links {
color: #3A3A3F;
text-decoration: none;
border-bottom: 1px black solid;
border-bottom-width: 2px;
cursor: pointer;   
}

.page-links:hover {
color: #485FED;
border-bottom: 1px #485FED solid;
border-bottom-width: 2px;
}

根据您所说的问题,有两种场景">点击链接并返回页面后,当您将鼠标悬停在链接上时,它仍然会亮起蓝色">

是否要在单个会话中保留单击的链接?

  • 如果是这样的话,那么你需要将你访问的链接存储在浏览器上的某个地方,比如cookie或localStorage或SessionStorage,并在渲染时对照列表进行检查。如果存在,请更改CSS,否则请使用不同的CSS
  • 您还需要存储关于列表大小的逻辑。它应该有多大,在浏览器上可以存储多长时间(过期(

是否希望访问的链接在多个会话中持续存在?

  • 如果是这样的话,那么您也需要服务器端的一些帮助。您需要一种机制来将状态存储在后端(存储可以是您的选择-NoSql数据库、SQL数据库等(,然后在呈现页面时对照列表检查特定用户
  • 您需要一种识别用户的机制。如果他们登录了,这很容易,你可以使用他们的用户id。如果用户是匿名的,你可以创建一个cookie来识别用户,或者使用不同的机制来生成唯一的用户id

希望这能帮助

如果我们想使用:visited CSS伪选择器,基本上我们必须创建浏览器历史记录,因为visited伪选择器依赖于它。在不使用HTML锚元素创建真正导航的情况下,实现这一点的方法是history API。为了解决这个问题,我们必须在链接中添加符号href,以推送历史状态并防止默认的HTML链接导航事件行为。

一个合适的例子可以在这个代码沙箱和沙箱预览上找到

export default function DeviceCell({ device }) {
const router = useNavigate()
const handleClick = (e) => { 
// Prevent default HTML Anchor Event
e.preventDefault();
window.history.pushState({ data: device.id }, `Data: ${device.id}`, e.target.href);
router(device.id)
}
return (
<TableRow>

<TableCell>
<a href={`/user/${device.id}`} className="page-links" onClick={handleCLick}>List of users</a>
</TableCell>
</TableRow>
)}

CSS:

a.page-links:hover:visited {
background-color: #dc2626;
color: white;
}

这可能只是排序吗?

a: 悬停必须在CSS定义中的一个:链接和一个:visited之后才能生效。

.page-links{
text-decoration: none;
border-bottom: 1px black solid;
border-bottom-width: 2px;
color: #3A3A3F;
cursor: pointer;   
}
.page-links:visited { 
color: red; 
} 
.page-links:hover{
color: #485FED;
border-bottom: 1px #485FED solid;
border-bottom-width: 2px;
}

a.page-links:visited:hover { color: red;}

应该有效。

您的问题可以通过关联另一个函数来解决,该函数将在用户点击链接时更改链接的颜色

onclick = existing-function; changeColor() => {
document.this.style.color = "color";}

使用分号分隔这两个函数。

最新更新