【问题标题】:Bootstrap NavBar do not set up li class="active" with React-Router. ReactJSBootstrap NavBar 不使用 React-Router 设置 li class="active"。反应JS
【发布时间】:2017-10-09 19:35:30
【问题描述】:

我有一个名为 MenuAlumno 的 React-Component,它是一个 Bootstrap NavBar。我正在使用 ES6 - ReactJS - React-Router。

这是我的组件:

render() {
    return (
        <nav class="navbar navbar-default">

            <div class="navbar-header">
              <button type="button" class="navbar-toggle navbar-collapse-left" data-toggle="collapse" data-target="#idNavBarCollapsed" aria-expanded="false">
                <span class="sr-only">Menú</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand visible-xs-block" /*href="http://www.upct.es/"*/><span id="idTextoLogotipo">- INCIDENCIAS -</span></a>
            </div>

            <div id="idNavBarCollapsed" class="collapse navbar-collapse">
              <ul class="nav navbar-nav navbar-left">
                    <li><Link to='/administrador/inicio'>Inicio</Link></li>
                    <li><Link to='/administrador/nueva_incidencia'>Nueva Incidencia</Link></li>
                    <li><Link to='/administrador/incidencias_recibidas'>Incidencias Recibidas</Link></li>
                    <li><Link to='/administrador/informes'>Informes</Link></li>
                </ul>

                <ul class="nav navbar-nav navbar-right">
                    <li class="divider visible-xs-block"></li>
                    <p class="navbar-text navbar-text-center hidden-xs"><span class="glyphicon glyphicon-user"></span> Bienvenido, {this.state.nombre} ({this.state.dni})</p>
                    <p class="navbar-text navbar-text-center visible-xs-block"><span class="glyphicon glyphicon-user"></span> Bienvenido, {this.state.nombre}</p>
                    <li class="navbar-text-center"><a href="http://www.upct.es/"><span class="glyphicon glyphicon-off"></span> Salir</a></li>
                </ul>
            </div>

        </nav>
    );
}

但是当我点击&lt;li&gt; 时,它并没有设置为活动状态。我该如何解决这个问题?我已经尝试了很多不同的东西,但我还没有做到这一点......

另外,我希望如果我在导航栏上未定义的路线上(例如:/administrador/inicio/hi/How_are_you/Fine),则相应的&lt;li&gt; 将设置为活动状态(在本例中:/administrador/inicio)但如果我有另一个元素(在 NavBar 上定义)为:/administrador/inicio/hi 这不是活动的(我通过 window.location.pathname.include ('/administrador/inicio') 说这个-这将激活两个链接-)。仅激活父 &lt;li&gt;&lt;li&gt; 将我带到该网址),而不是“可能的父母”。

另外,我希望当我单击 F5 时,它继续处于活动状态。

在这个项目中我不能使用 React-Bootstrap,所以这个选项是不可能的。

我很长时间以来一直在努力解决这个问题,但我仍然没有得到它。欢迎任何帮助。

谢谢大家。

【问题讨论】:

    标签: twitter-bootstrap reactjs ecmascript-6 react-router navbar


    【解决方案1】:

    我之前遇到过这个问题。你应该注意一下路线的“这个道具”,你可以发现路线已经改变,然后你通过这个改变来做一些事情。

    【讨论】:

    • 非常感谢,不过不知道有什么用。
    • 我输入:console.log(this.props) 但返回一个空对象
    【解决方案2】:

    也许你正在寻找这个

    var selector = '.nav li';
    
    $(selector).on('click', function(){
        $(selector).removeClass('active');
        $(this).addClass('active');
    });
    li.active {
        color: Red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul class="nav">
        <li style="cursor:pointer">Inicio</li>
        <li style="cursor:pointer">Nueva Incidencia</li>
        <li style="cursor:pointer">Incidencias Recibidas</li>
        <li style="cursor:pointer"> Informes</li>
    </ul>

    【讨论】:

    • 或多或少,但这会在必须使用 F5 重新加载时出现问题。对于未出现在 NavBar 中或属于单击的父级的子路由也会出现问题。
    【解决方案3】:

    已解决:

    render() {
        return (
            <nav class="navbar navbar-default">
    
                <div class="navbar-header">
                  <button type="button" class="navbar-toggle navbar-collapse-left" data-toggle="collapse" data-target="#idNavBarCollapsed" aria-expanded="false">
                    <span class="sr-only">Menú</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                  </button>
                  <a class="navbar-brand visible-xs-block" /*href="http://www.upct.es/"*/><span id="idTextoLogotipo">- INCIDENCIAS -</span></a>
                </div>
    
                <div id="idNavBarCollapsed" class="collapse navbar-collapse">
                  <ul class="nav navbar-nav navbar-left">
                        <li><NavLink to='/administrador/inicio'>Inicio</NavLink></li>
                        <li><NavLink to='/administrador/nueva_incidencia'>Nueva Incidencia</NavLink></li>
                        <li><NavLink to='/administrador/incidencias_recibidas'>Incidencias Recibidas</NavLink></li>
                        <li><NavLink to='/administrador/informes'>Informes</NavLink></li>
                    </ul>
    
                    <ul class="nav navbar-nav navbar-right">
                        <li class="divider visible-xs-block"></li>
                        <p class="navbar-text navbar-text-center hidden-xs"><span class="glyphicon glyphicon-user"></span> Bienvenido, {this.state.nombre} ({this.state.dni})</p>
                        <p class="navbar-text navbar-text-center visible-xs-block"><span class="glyphicon glyphicon-user"></span> Bienvenido, {this.state.nombre}</p>
                        <li class="navbar-text-center"><a href="http://www.upct.es/"><span class="glyphicon glyphicon-off"></span> Salir</a></li>
                    </ul>
                </div>
    
            </nav>
        );
    }
    

    【讨论】:

    • 这不是在a元素上设置的吗,什么时候应该在li上?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2013-04-29
    相关资源
    最近更新 更多