具有响应的自举程序中的突出显示当前页面

问题描述 投票:0回答:2

我已经看到了与此相关的多个问题,并且我都尝试了全部,但没有结果。因此,发布了另一个看似重复的问题。

我正在尝试突出显示导航栏中的当前页面按钮。对于简单的示例,在我不将其路由到新页面的情况下,它可以工作。但是,当我将其路由到另一个页面(一个单独的react组件)时,它不起作用。

这是我的代码:

App.jsx

class App extends Component {
  render() {
    return (
        <BrowserRouter>
            <div>
                <Route exact={true} path='/' component={HomeApp}/>
                <Route path='/form' component={SomeForm}/>
            </div>
        </BrowserRouter>
    );
  }
}

NavigationBar.jsx

class NavigationBar extends Component {

    componentDidMount() {
        toggleIcon();
    }

    render() {
        return (<div id="topheader">
        <nav className="navbar navbar-expand-lg navbar-light bg-light ">

            <a className="navbar-brand" href="#">Whatever</a>

            <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
                    aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span className="navbar-toggler-icon"></span>
            </button>

            <div className="collapse navbar-collapse" id="navbarNav">
                <ul className="navbar-nav nav nav-pills ml-auto">
                    <li className="nav-item active">
                        <a className="nav-link" href="/">Home <span className="sr-only">(current)</span></a>
                    </li>
                    <li className="nav-item">
                        <a className="nav-link" href="/form">Submit Form</a>
                    </li>
                    <li className="nav-item">
                        <a className="nav-link" href="#">Sign Up</a>
                    </li>
                    <li className="nav-item">
                        <a className="nav-link " href="#">Login</a>
                    </li>
                </ul>
            </div>
        </nav>
            </div>
        )
    }
}

export default NavigationBar

navigation.js

import $ from 'jquery';

export function toggleIcon() {
    $( '#topheader .navbar-nav a' ).on( 'click', function () {
        $( '#topheader .navbar-nav' ).find( 'li.active' ).removeClass( 'active' );
        $( this ).parent( 'li' ).addClass( 'active' );
    });
}

如图所示,当我单击Sign UpLogin时,突出显示起作用,因为它们没有被路由到任何其他组件。

但是当我单击路由到Submit Form组件的SomeForm时,突出显示将返回Home按钮。

有关更多详细信息,我要发布HomeAppSomeForm组件的内容:

HomeApp.jsx

class HomeApp extends Component {
    render() {
        return (
            <div className="container">
                <NavigationBar/>
                <Jumbotron/>
            </div>
        )
    }
}

export default HomeApp

SomeForm.jsx

class SomeForm extends Component {
    render() {
        return (<>
                <div className="container">
                    <NavigationBar>
                    </NavigationBar>
                </div>
            </>
        )
    }
}

export default SomeForm
reactjs bootstrap-4 react-router react-navigation react-bootstrap
2个回答
0
投票
import React, { Component } from 'react'; import { withRouter } from 'react-router'; class NavigationBar extends Component { constructor(props) { super(props); this.renderMenuLink = this.renderMenuLink.bind(this); } componentDidMount() { toggleIcon(); } renderMenuLink({ path, label }) { const { location } = this.props; const isActive = location.pathname === path; return ( <li key={path} className={`nav-item ${isActive ? 'active' : ''}`}> <NavLink className="nav-link" to={path}> {label}{isActive ? <span className="sr-only">(current)</span> : ''} </NavLink> </li> ); } render() { const menuLinks = [ { path: '/', label: 'Home' }, { path: '/form', label: 'Submit Form' }, { path: '/register', label: 'Sign Up' }, { path: '/login', label: 'Login' }, ]; return (<div id="topheader"> <nav className="navbar navbar-expand-lg navbar-light bg-light "> <a className="navbar-brand" href="#">Whatever</a> <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span className="navbar-toggler-icon"></span> </button> <div className="collapse navbar-collapse" id="navbarNav"> <ul className="navbar-nav nav nav-pills ml-auto"> {menuLinks.map((menuLink) => this.renderMenuLink(menuLink))} </ul> </div> </nav> </div> ) } } export default withRouter(NavigationBar);
© www.soinside.com 2019 - 2024. All rights reserved.