zoukankan      html  css  js  c++  java
  • 使用antd UI 制作菜单

    antd 主页地址:https://ant.design/docs/react/introduce

    在使用过程中,不能照搬antd的组件代码,因为有些并不合适。首先,菜单并没有做跳转功能,仅仅是菜单,需要在它的基础方法中添加我们的业务代码。

    /*菜单组件,所有的方法都要bind this*/
    
    import React,{Component} from 'react';
    import {render} from 'react-dom';
    import {Link,browserHistory} from 'react-router';
    
    import Menu from 'antd/lib/menu';
    import Icon from 'antd/lib/icon';
    const SubMenu = Menu.SubMenu;
    const MenuItemGroup = Menu.ItemGroup;
    
    import {user_search_path,
            application_search_path,navigation_search,advertising_search} from 'config';
    
    export default class Sidebar extends Component{
        constructor(props){
            super(props);
            this.state = {
                current: '1',
                openKeys: []
            }
        }
    
        handleClick(e) {
           /*这里要做判断,判断是点击哪个菜单,就跳转到相应的菜单内容,使用router进行跳转*/
            if(e.key == "1"){
                browserHistory.push(user_search_path);
            }else if(e.key == '2'){
                browserHistory.push(application_search_path);
            }else if(e.key == '3'){
                browserHistory.push(navigation_search);
            }else if(e.key == '4'){
                browserHistory.push(advertising_search);
            }
    
            this.setState({
                current: e.key,
                openKeys: e.keyPath.slice(1)
            });
        }
    
        onToggle(info) {
            console.log('onToggle', info);
            this.setState({
                openKeys: info.open ? info.keyPath : info.keyPath.slice(1)
            });
        }
    
    
        getKeyPath(key) {
            const map = {
                sub1: ['sub1'],
                sub2: ['sub2'],
                sub3: ['sub2', 'sub3'],
                sub4: ['sub4'],
            };
            return map[key] || [];
        }
    
        render(){
    
            return(
                <div>
                    <Menu
                        mode="inline" 
                        openKeys={this.state.openKeys}
                        selectedKeys={[this.state.current]}
                        style={{  230 }}
                        onOpen = {this.onToggle.bind(this)}   /*打开菜单*/
                        onClose = {this.onToggle.bind(this)}  /*关闭菜单*/
                        onClick={this.handleClick.bind(this)} /*触发菜单*/
                        >
                        <SubMenu key="sub1" title={<span><Icon type="user" /><span>用户服务</span></span>}>
                            <Menu.Item key="1">设置权限</Menu.Item>
                        </SubMenu>
                        <SubMenu key="sub2" title={<span><Icon type="setting" /><span>配置服务</span></span>}>
                            <Menu.Item key="2">app版本查询</Menu.Item>
                            <SubMenu key="sub3" title="app配置版本查询">
                                <Menu.Item key="3">导航配置查询</Menu.Item>
                                <Menu.Item key="4">广告配置查询</Menu.Item>
                            </SubMenu>
                            <Menu.Item key="5">app changeLog</Menu.Item>
                        </SubMenu>
                        <SubMenu key="sub4" title={<span><Icon type="mail" /><span>短信服务</span></span>}>
                        </SubMenu>
                    </Menu>
                </div>
            );
        }
    }

    第二步,通过页面加载组件Parent.js,固定菜单与菜单内容的位置

    import React,{Component} from 'react';
    import {render} from 'react-dom';
    import Icon from 'antd/lib/icon';
    
    import jiChu from '../../../build/images/jichu.png';
    
    import HeaderRight from '../login/HeaderRight.js';
    import SearchUser from '../login/SearchUser.js';
    import Sidebar from '../sidebar/Sidebar.js';
    
    import style from '../../../build/css/login.css';
    
    
    export default class Parent extends Component{
        constructor(props){
            super(props);
        }
    
        render(){
    
            const headerUserPanel = (<HeaderRight {...this.props} />);
            const search = (<SearchUser {...this.props} />);
            const sidebars = (<Sidebar {...this.props} />);   /*菜单组件*/
    
            return(
                <div className="main-view">
                    <div className="main-sidebar">
                        <div className="sidebar-wrapper">
                            <div className="sidebar">
                                <div className="logo">
                                    <img src={jiChu} className="logoPic" />
                                </div>
                                <div className="sidebar-nav">
                                    {sidebars}
                                </div>
                                <div className="sidebar-footer">
                                    <span><Icon type="double-left" /><span>收缩菜单</span></span>
                                </div>
                            </div>
                        </div>
                    </div>
                    <div className="main-wrapper">
                        <div className="main-nav-bar">
                            <div className="navbar">
                                {headerUserPanel}
                            </div>
                            <div className="main-body">
                                <div className="main-content">
                                    {this.props.children}             /*菜单组件对应内容*/
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
    
            );
        }
    }

    最后一步,在路由中通过path将页面与路径关联,这样我们在菜单组件中的跳转就是通过这一步控制

    import React from 'react';
    import {render} from 'react-dom';
    import { Router , Redirect, Route , IndexRoute , browserHistory } from 'react-router';
    import { Provider } from 'react-redux'
    
    const store = configureStore();
    render((
        <Provider store={store}>
    <Router history={browserHistory}> <Route path={user_service_path} component={Parent}> <Route path={user_sidebar_bath} component={Sidebar}></Route> <Route path={application_search_path} component={AdvertisementTablePannelContainer}></Route> </Provider> ), document.getElementById('root'));

    完毕!

  • 相关阅读:
    黑松白鹿
    跨越
    第三年
    Lua windows环境搭建
    Iron man
    水果沙拉
    六周岁
    sqlserver数据库附加报错5120
    [BeiJing2006]狼抓兔子 平面图最小割
    BZOJ2118: 墨墨的等式 思维建图
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/5948060.html
Copyright © 2011-2022 走看看