导航栏路由逻辑:非当前登录用户页按钮activeTab类赋值问题
错误原因
两种写法失效的核心问题:
- 第一种写法里的
!userInfo.username是对用户名变量做布尔取反,返回值只有true/false两种,最终拼接出的路径是/users/true或/users/false,根本匹配不到真实的用户个人页地址。 - 第二种写法在模板字符串内直接写
*属于无效语法,同时JS的全等判断===本身不支持通配符模糊匹配,无法覆盖所有/users/前缀的路径。
正确实现代码
先判断路径是否为用户个人页,再提取路径中的用户名和当前登录用户做比对,同时覆盖/exploreUsers路由的激活规则即可:
className={ location.pathname === "/exploreUsers" || ( location.pathname.startsWith("/users/") && // 提取路径中/users/后的用户名部分,和当前登录用户比对 location.pathname.split("/users/")[1] !== userInfo.username ) ? "activeTab" : null }
注意:如果项目中存在
/users/用户名/其他子页面这类嵌套路由,可以把用户名提取逻辑换成正则匹配,取/users/后第一段非斜杠内容做比对,避免嵌套路径误触发激活态。
该逻辑和你已有的个人中心按钮激活规则完全互斥,不会出现两个导航按钮同时激活的问题。
内容的提问来源于stack exchange,提问作者filroy-codes
相关产品推荐
相关产品推荐

