zoukankan      html  css  js  c++  java
  • react 使用antd导航组件实现事件传递并局部刷新DOM

    我们要实现一个通过点击顶部导航来查询左侧菜单的一个功能

    在这个功能中,我们要应用到onClick={this.headNavMenuList.bind(this)}方法来传递点击 不同按钮来传递不同的值 

    注意:如果 我们要在后续事件中使用传递过来的参数来更新局部DOM,则可以不加.bind(this),否则会报出警告

    adtd中的事件与常用的事件略有不同,是在父层窗口上绑定事件,通过相同的key值来实现不同的数据传递

    onClick={this.headNavMenuList.bind(this)}

    <Menu  mode="horizontal" selectedKeys={[]} onClick={this.headNavMenuList.bind(this)}>

    参数mode表示排列方式,selectedKeys的值就和<Menu.Item key="">的key值相同时,该<Menu.Item key="">就是选中状态,

    onClick事件函数的参数表示事件源,即点击哪个菜单元素,e就表示哪个菜单元素

    我们通过.bind(this)来绑定子元素的key值 来达到点击 不同按钮效果

    然后通过this.setState()方法来重新对元素赋值并更新DOM

    let Page = React.createClass({
        mixins: [LoadingMixin,NotificationMixin,RequestMixin],
        getInitialState() {
            let userInfo = LocalService.getUserInfo() && JSON.parse(LocalService.getUserInfo()) || {};
            return {
                routes: [],
                modules: modules || [],
                curSelectedMenuKey: [],
                userInfo: userInfo,
                openKeys: [],
                prolist:prolist,
                headNav:[{number:"1",name:"iframe"},{number:"2",name:"itable"},{number:"3",name:"home"}],
                
            }
        },
    headNavMenuList(e){
            let prolistId = e.key;
            this.get({
                url: "Api/search/module/menu/key/dac509bd90a231239291e12c24a6f1af4bac",
                param: {
                    proid: prolistId,
                    userid:this.state.userInfo.id
                },
                noLoading: true
            }).then(result=> {
                this.setState({modules: result.result || []});
                // callback && callback(result.result || []);
            })
        },
    render(){
        return (
          <div className="app-main">
                    <div className="app-header">
                        <div className="header-title" >管理后台</div>
                        <Menu
                            theme="dark"
                            mode="horizontal"
                            defaultSelectedKeys={['1']}
                            style={{ lineHeight: '64px' }}
                            onClick={this.headNavMenuList}
                        >
                            {
                                this.state.headNav && this.state.headNav.map((items,index) =>{
                                    for(let i=0;i<prolist.prolist.length;i++){
                                        if(prolist.prolist[i] == items.number){
                                            return (
                                                <Menu.Item key={prolist.prolist[i]} >{items.name}</Menu.Item>
                                            )
                                        }
    
                                    }
    
                                })
    
    
                            }
                        </Menu>
                        
                    </div>   
    
           div className="app-wrap">
                        <div className="nav-sider" >
                            <Menu
                                mode="inline"
                                selectedKeys={this.state.curSelectedMenuKey}
                                openKeys={this.state.openKeys}
                                onOpenChange= {this.onOpenChange}
                                style={{ height: '100%', borderRight: 0 }}
                                onClick={this.handleMenuItemClick}
                                className="scroll"
                            >
                                {
    
                                    this.state.modules && this.state.modules.map((subItem,index) => {
                                        if (subItem.hasChildren) {
                                            return (
                                                <SubMenu key={subItem.id} title={subItem.title}  >
                                                    {
                                                        subItem.children &&  subItem.children.map((item,j) => {
                                                            return (
                                                                <Menu.Item key={item.id} onClick={this.handleMenuItemClick}>{item.title}</Menu.Item>
                                                            )
                                                        })
                                                    }
                                                </SubMenu>
                                            )
                                        }
                                        else {
                                            return (
                                                <Menu.Item key={subItem.id} >{subItem.title}</Menu.Item>
                                            )
                                        }
                                    })
                                }
                            </Menu>
                        </div>
         )
    }
  • 相关阅读:
    利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题
    node.js的fs核心模块读写文件操作 -----由浅入深
    node.js 发布订阅模式
    js 发布订阅模式
    vue.js定义一个一级的路由 ----由浅入深
    vue.js编程式路由导航 --- 由浅入深
    vue.js嵌套路由-------由浅入深
    Spring事件体系
    Hibernate监听器
    学习网站地址
  • 原文地址:https://www.cnblogs.com/zhixi/p/9951295.html
Copyright © 2011-2022 走看看