首页
学习
活动
专区
工具
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/)了解更多关于这些产品的详细信息。

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

相关·内容

React NavLink的使用

NavLink的概述NavLinkreact-router-dom库中的一个特殊导航链接组件,它可以帮助我们在React应用程序中创建导航链接,并根据当前活动的URL自动添加活动链接的样式。...NavLink的使用方法首先,确保您已经安装了react-router-dom库:npm install react-router-dom接下来,让我们看一个使用NavLink的示例:import React...然后,在导航栏中,我们使用NavLink组件创建了三个导航链接:Home、AboutContact。在每个NavLink组件中,我们通过to属性指定链接的目标URL。...我们还通过activeClassName属性指定了活动链接的样式名称,这里我们使用了active作为样式名称。当链接与当前URL匹配时,NavLink会自动将该样式用于活动链接。...这些属性使得我们可以根据需要来配置NavLink的行为样式

1.3K10

React第三方组件1(路由管理之Router的使用①简单使用)

1、React第三方组件1(路由管理之Router的使用①简单使用)---2018.01.22 2、React第三方组件1(路由管理之Router的使用②多层级跳转及重定向)---2018.01.23...3、React第三方组件1(路由管理之Router的使用③传参)---2018.01.24 4、React第三方组件1(路由管理之Router的使用④按需加载-上)---2018.01.25 5、React..., Route, NavLink} from 'react-router-dom' HashRouter, Route, NavLink 这些含义大家查官网,或者百度,网上有很多资料,我只讲怎么用!...to="/" activeClassName="selected" exact>首页 NavLink:渲染后会被转化程a链接 to:就是跳转页面地址 activeClassName...:就是链接当前页面理由一致后会使用这个样式

1.7K30

React 入门学习(十)-- React 路由

路由的基本使用 react-router-dom 的理解使用 专门给 web 人员使用的库 一个 react 的仓库 很常用,基本是每个应用都会使用的这个库 专门来实现 SPA 应用 首先我们要明确好页面的布局...路由组件一般组件 在我们前面的内容中,我们是把组件 Home 组件 About 当成是一般组件来使用,我们将它们写在了 src 目录下的 components 文件夹下,但是我们又会发现它普通的组件又有点不同...NavLink 标签 NavLink 标签是 Link 标签作用相同的,但是它又比 Link 更加强大。...我们可以看到左侧的元素类名在不断的切换,当然 NavLink 标签是默认的添加上 active 类,我们也可以改变它,在标签上添加一个属性 activeClassName 例如 activeClassName...NavLink 封装 在上面的 NavLink 标签种,我们可以发现我们每次都需要重复的去写这些样式名称或者是 activeClassName ,这并不是一个很好的情况,代码过于冗余。

1.6K10

React第三方组件1(路由管理之Router的使用④按需加载-上)

1、React第三方组件1(路由管理之Router的使用①简单使用)---2018.01.22 2、React第三方组件1(路由管理之Router的使用②多层级跳转及重定向)---2018.01.23...3、React第三方组件1(路由管理之Router的使用③传参)---2018.01.24 4、React第三方组件1(路由管理之Router的使用④按需加载-上)---2018.01.25 5、React...第三方组件1(路由管理之Router的使用⑤按需加载-下)---2018.01.26 开发环境:Windows 8,node v8.9.1,npm 5.5.1,WebStorm 2017.2.2 既然我们都用上了路由了...修改 demo 下的 Index.jsx import React from 'react'; import {HashRouter, Route, NavLink,Redirect} from 'react-router-dom...to="/Dome1" activeClassName="selected" exact>demo1 <NavLink to="/Dome2" activeClassName

1.7K40

React 入门学习(十)-- React 路由

路由的基本使用 react-router-dom 的理解使用 专门给 web 人员使用的库 一个 react 的仓库 很常用,基本是每个应用都会使用的这个库 专门来实现 SPA 应用 首先我们要明确好页面的布局...路由组件一般组件 在我们前面的内容中,我们是把组件 Home 组件 About 当成是一般组件来使用,我们将它们写在了 src 目录下的 components 文件夹下,但是我们又会发现它普通的组件又有点不同...NavLink 标签 NavLink 标签是 Link 标签作用相同的,但是它又比 Link 更加强大。...我们可以看到左侧的元素类名在不断的切换,当然 NavLink 标签是默认的添加上 active 类,我们也可以改变它,在标签上添加一个属性 activeClassName 例如 activeClassName...NavLink 封装 在上面的 NavLink 标签种,我们可以发现我们每次都需要重复的去写这些样式名称或者是 activeClassName ,这并不是一个很好的情况,代码过于冗余。

1.8K10
领券