首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React router NavLink activeClassName不适用于redux和样式组件

React Router是一个用于构建单页面应用的库,它提供了一组用于导航和路由的组件。其中,NavLink是React Router中的一个组件,用于创建导航链接。

在React Router中,NavLink组件可以根据当前URL与其指定的路径进行匹配,并添加一个特定的类名来表示当前活动的链接。这个特定的类名可以通过activeClassName属性进行设置。

然而,当使用Redux和样式组件时,NavLink的activeClassName属性可能不起作用。这是因为Redux和样式组件可能会改变组件的渲染方式,导致NavLink无法正确地添加或移除activeClassName类名。

解决这个问题的一种方法是使用自定义的activeClassName逻辑。可以通过在组件中使用React Router提供的useLocation钩子来获取当前URL,并根据需要手动添加或移除类名。

以下是一个示例代码,展示了如何在Redux和样式组件中使用自定义的activeClassName逻辑:

代码语言:txt
复制
import { NavLink, useLocation } from 'react-router-dom';
import { useSelector } from 'react-redux';
import styled from 'styled-components';

const StyledNavLink = styled(NavLink)`
  /* 样式组件的样式 */
`;

const CustomNavLink = ({ to, activeClassName, children }) => {
  const location = useLocation();
  const isActive = location.pathname === to;

  return (
    <StyledNavLink to={to} className={isActive ? activeClassName : ''}>
      {children}
    </StyledNavLink>
  );
};

const App = () => {
  const isAuthenticated = useSelector(state => state.auth.isAuthenticated);

  return (
    <nav>
      <CustomNavLink to="/" activeClassName="active">
        Home
      </CustomNavLink>
      {isAuthenticated && (
        <CustomNavLink to="/dashboard" activeClassName="active">
          Dashboard
        </CustomNavLink>
      )}
    </nav>
  );
};

在上面的代码中,我们创建了一个名为CustomNavLink的组件,它使用了Styled Components来定义样式,并使用useLocation钩子获取当前URL。根据当前URL是否与指定的路径匹配,我们手动添加或移除了activeClassName类名。

需要注意的是,上述代码中的示例仅用于演示目的,实际情况下可能需要根据具体的应用场景进行适当的修改。

推荐的腾讯云相关产品:腾讯云服务器(CVM)、腾讯云容器服务(TKE)、腾讯云数据库(TencentDB)等。你可以通过访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券