react: navigator

1、page js

import React from "react";
import {Link} from "react-router-dom";
import LoginUser from "service/login-service/LoginUser";
import "./index.scss";

const _loginUser = new LoginUser();
const isLogin = _loginUser.hasLogin();

const navItems = [];
const navigators = [];

class Navigator extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            currentType: props.nav
        }

    }

    activeItemClass(item) {
        return this.state.currentType === item.type ? 'active' : '';
    }

    toState(item) {
        this.setState({
            currentType: item.type
        });
    }

    render() {
        const navigator = (
            <ul className="nav nav-tabs">
                {navItems.map((item, index) => {
                        return (
                            <li key={'li_' + index} className={this.activeItemClass(item)}>
                                <Link to={item.state} onClick={() => this.toState(item)}>{navigators[item.type]}</Link>
                            </li>
                        )
                    }
                )}
            </ul>);
        return (<div className="app-navigator">{isLogin ? navigator : null}</div>)
    }
}

export default Navigator;
import React from "react";
import {Link} from "react-router-dom";
import {connect} from "react-redux";
import MenuService from "service/MenuService";
import LoginUser from "service/login-service/LoginUser";
import {fetchMenuData} from "reduxModel/actions/MenuAction";
import "./index.scss";

const _menuService = new MenuService();

const _loginUser = new LoginUser();
const isLogin = _loginUser.hasLogin();

const mapStateToProps = state => {
    return {
        menuData: state.MenuReducer.data
    }
};
const mapDispatchToProps = {
    fetchMenuData: fetchMenuData,
};

class Navigator extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            currentType: props.nav
        }

    }

    componentDidMount() {
        this.props.fetchMenuData();
    }

    activeItemClass(item) {
        return this.state.currentType === item.type ? 'active' : '';
    }

    toState(item) {
        this.setState({
            currentType: item.type
        });
    }

    render() {
        const {menuData} = this.props;
        const navigator = (
            <ul className="nav nav-tabs">
                {menuData &&
                _menuService.getModules(menuData.menuTree).map((item, index) => {
                        return (
                            <li key={'li_' + index} className={this.activeItemClass(item)}>
                                <Link to={item.state} onClick={() => this.toState(item)}>
                                    {menuData.navigators[item.type]}
                                </Link>
                            </li>
                        )
                    }
                )}
            </ul>);
        return (<div className="app-header-nav">{isLogin ? navigator : null}</div>)
    }
}


const NavigatorContainer = connect(
    mapStateToProps,
    mapDispatchToProps
)(Navigator);

export default NavigatorContainer;

 

 

2、style

.app-header-nav {
  position: relative;
  width: $body-min-width;
  margin: auto;

  .nav-tabs {
    position: absolute;
    right: 0;
    bottom: 1px;
    border-bottom: none;

    > li {
      > a {
        margin-right: 0;
        border: $border;
        border-right: none;
        border-radius: 0;
        outline: none;
        background-color: $item-active-bg-color;
        text-align: center;

        &:hover {
          border-color: $border-color;
          color: $title-color;
        }
      }

      &:last-child > a {
        border-right: $border;
      }

      & {
        border-top: 3px solid $bg-color;
      }

      &.active {
        border-top: 3px solid $primary-color;

        > a {
          &,
          &:hover,
          &:focus {
            border-top-color: #fff;
            border-bottom-color: #fff;
            background-color: #fff;
            color: $primary-color;
            font-weight: bold;
          }
        }

        + li > a {
          &,
          &:hover,
          &:focus {
            border-left: none;
          }
        }
      }
    }
  }
}

 

转载于:https://www.cnblogs.com/Nyan-Workflow-FC/p/9332566.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值