简体   繁体   English

反应路由器跟踪活动链接

[英]React-router tracking active link

Since react-router is not adding an active class to links or li's, I want to keep the active link in my menus state. 由于react-router并未将活动类添加到链接或li的活动类中,因此我想将活动链接保持在菜单状态。 When I log this.state.activeLink I get the correct value, but for some reason the class 'activeLink' is not added to the li. 当我登录this.state.activeLink时,我得到了正确的值,但是由于某种原因,类“ activeLink”没有添加到li中。 Why is this? 为什么是这样? isActive() is correctly returning true or false when I log it but still the class is not added to the li. 当我记录isActive()正确返回true或false时,但仍未将类添加到li中。 What's going on here? 这里发生了什么?

import React, { Component } from 'react';
import { Link } from 'react-router-dom';

import logo from '../images/logo.png';

export default class Navbar extends Component {
    constructor(props){
        super(props);

        this.state = { activeLink : '' };
        this.setActive = this.setActive.bind(this);
    }

    setActive(event){
        this.setState({ activeLink: event.target.id });
    }

    isActive(link){
        console.log('isActive:', link == this.state.activeLink);
        link == this.state.activeLink ? 'activeLink' : '';
    }

    render(){
        return (
            <div className="header">
                <div className="row">
                    <div className="header-left">
                        <div className="logo">
                            <img src={logo} alt=""/> 

                        </div>
                        <div className="header-title">Physical Twist</div>

                        <div className="menu">
                            <ul className="nav">
                                <li className={this.isActive('home')}><Link to="/" id="home" onClick={this.setActive}>Home</Link></li>
                                <li className={this.isActive('store')}><Link to="/store" id="store" onClick={this.setActive}>Store</Link></li>
                                <li className={this.isActive('catalogue')}> <Link to="#" id="catalogue" onClick={this.setActive}>Catalogue</Link></li>
                                <li className={this.isActive('contact')} ><Link to="#" id="contact" onClick={this.setActive}>Contact</Link></li>
                            </ul>
                        </div>                              
                    </div>
                </div>
            </div>
        );
    };
}

isActive is not returning anything. isActive不返回任何内容。

isActive(link){
    link == this.state.activeLink ? 'activeLink' : '';
}

should be 应该

isActive(link){
    return link == this.state.activeLink ? 'activeLink' : '';
}

Because you forgot to add return in isActive() function, use this: 因为您忘记在isActive()函数中添加return ,所以使用以下命令:

isActive(link){
   console.log('isActive:', link == this.state.activeLink);
   return link == this.state.activeLink ? 'activeLink' : '';
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM