当前位置:  开发笔记 > 后端 > 正文

如何从React路由器向链接添加活动类?

如何解决《如何从React路由器向链接添加活动类?》经验,为你挑选了5个好方法。

我使用创建一个bootstrap风格的侧边栏Link.这是我的代码片段:

  • MAIN NAVIGATION
  • Dashboard
  • Email Lists
  • Buy Verifications

```

我想active在包装元素上设置活动路径的类

  • .我看到有其他的解决方案,在那里,展示了如何做到这一点kindof(使用反应路由器当前的路线有条件地设置活动类菜单上),但我不认为这是设置在一个包装的主动类的最佳方式Link.

    我还发现了https://github.com/insin/react-router-active-component,但感觉它应该是不必要的.

    在React Router中,这是可能的,还是需要使用外部解决方案?



    1> Vijey..:

    在链接组件上,您现在可以添加activeClassName或设置activeStyle.

    这些允许您轻松地将样式添加到当前活动的链接.


    以前,您可以创建一个自定义组件,其作用类似于使用以下逻辑链接的包装器.

    在名为nav_link.js的文件中

    import React from 'react';
    import { Link } from 'react-router-dom';
    import PropTypes from 'prop-types';
    
    class NavLink extends React.Component {
        render() {
            var isActive = this.context.router.route.location.pathname === this.props.to;
            var className = isActive ? 'active' : '';
    
            return(
                
                    {this.props.children}
                
            );
        }
    }
    
    NavLink.contextTypes = {
        router: PropTypes.object
    };
    
    export default NavLink;
    

    并在组件中使用如下所示:

    ...
    import NavLink from "./nav_link";
    .....
    
    
    


    这应该是公认的答案.谢谢!
    请将此标记为正确答案,以便其他人可以看到.
    为什么不使用由“反应路由器”公开的“ activeStyle”或“ activeClassName”呢?周围有一些[documentation](https://github.com/reactjs/react-router-tutorial/tree/master/lessons/05-active-links)。

    2> Matt..:

    React-Router V4带有一个开箱即用的NavLink组件

    要使用,只需将activeClassName属性设置为您已适当设置样式的类,或直接设置activeStyle为所需的样式.有关更多详细信息,请参阅文档.

    Hello
    


    这会输出一个锚标记.OP想要输出列表项的东西.

    3> 小智..:

    使用ES6更新答案:

    import React, { Component } from 'react';
    import { Link } from 'react-router'
    
    class NavLink extends Component {
        render() {
            let isActive = this.context.router.isActive(this.props.to, true);
            let className = isActive ? "active" : "";
    
            return (
                
  • ); } } NavLink.contextTypes = { router: React.PropTypes.object }; export default NavLink;

    然后如上所述使用它.



    4> DaafVader..:

    我不喜欢创建自定义组件的想法,因为如果你有一个不同的包装元素,你将不得不创建另一个自定义组件等.此外,它只是矫枉过正.所以我只是用css和activeClassName做到了:

  • Something
  • 然后只需添加一些CSS:

    li.link-wrapper > a.active {
        display: block;
        width: 100%;
        height:100%;
        color: white;
        background-color: blue;
    }
    

    从技术上讲,这不会影响li,但它会使锚填充li并为其设计样式.



    5> Barack Obama..:

    这是我的方式,使用道具的位置。我不知道,但是history.isActive对我来说是不确定的

    export default class Navbar extends React.Component {
    render(){
    const { location } = this.props;
    
    const homeClass = location.pathname === "/" ? "active" : "";
    const aboutClass = location.pathname.match(/^\/about/) ? "active" : "";
    const contactClass = location.pathname.match(/^\/contact/) ? "active" : "";
    
    
    return (
    
    • Home
    • About
    • Contact
    );}}


    `<li class = {homeClass}> ... </ li>`更改class => className
  • 推荐阅读
    LEEstarmmmmm
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有