在好例子网,分享、交流、成长!
您当前所在位置:首页js 开发实例高级JavaScript组件 → react+antd+mune+tab联动

react+antd+mune+tab联动

高级JavaScript组件

下载此实例
  • 开发语言:js
  • 实例大小:9.81KB
  • 下载次数:11
  • 浏览次数:285
  • 发布时间:2020-10-23
  • 实例类别:高级JavaScript组件
  • 发 布 人:yynn
  • 文件格式:.zip
  • 所需积分:2
 相关标签: react Ant EA re

实例介绍

【实例简介】

【实例截图】

【核心代码】

import React from 'react'
import { Layout, Menu,Tabs } from 'antd';
import { BrowserRouter as Router,Route,Link} from 'react-router-dom'
import './css/layout.css'
import Option1 from './components/option1'
import Option2 from './components/option2'
import Option3 from './components/option3'
var createHistory = require('history').createBrowserHistory
const history = createHistory() 
const TabPane = Tabs.TabPane
const { Header, Content, Sider } = Layout;
class Layout1 extends React.Component{
    constructor(props){
        super(props)
        this.newTabIndex = 0
        const panes = []
        const menuPanes=[
          { title:"tab1", content: Option1, key: "1",router:"/option1",nav:'option1'},
          { title:"tab2", content: Option2, key: "2",router:"/option2",nav:'option2'},
          { title:"tab3", content: Option3, key: "3",router:"/option3",nav:'option3'}
        ]
        const selectedKey=""
        this.state = {
          activeKey: panes.length==0 ? '1':panes[0].key,
          panes,
          menuPanes,
          selectedKey
        }
    }
    handleClick(pane){
        let panes = this.state.panes
        let activeKey=pane.key
        let flag=true

        debugger
        panes.length > 0 && panes.map((item,i)=>{
           if(item.key == activeKey){
                flag = false
           } 
        })
        if(!panes||panes.length===0||flag){
            panes.push(pane)
        }
        let selectedKey=activeKey
        this.setState({ panes, activeKey,selectedKey })
    }  
    onChange = (activeKey) => {
      const panes = this.state.panes
      let router
      panes.map((item,i)=>{
        if(activeKey === item.key){
          router = item.router
          return false
        }
      })
      history.push(router)  
      let selectedKey=activeKey
      this.setState({selectedKey ,activeKey })
    }  
    onEdit = (targetKey, action) => {
      this[action](targetKey)
    }
    add = () => {
      const panes = this.state.panes
      const activeKey = `newTab${this.newTabIndex  }`
      panes.push({ title: 'New Tab', content: 'Content of new Tab', key: activeKey })
      this.setState({ panes, activeKey })
    }
    remove = (targetKey) => {
      debugger
      let activeKey = this.state.activeKey
      let lastIndex
      this.state.panes.forEach((pane, i) => {
        if (pane.key == targetKey) {
          lastIndex = i - 1
        }
      })
      const panes = this.state.panes.filter(pane => pane.key != targetKey);
      if (lastIndex >= 0 && activeKey === targetKey) {
        activeKey = panes[lastIndex].key
      }
      this.setState({ panes, activeKey })
    }
    
    render(){
        return <Layout>
        <Header className="header">
          <div className="logo" />
          <p style={{color:'white'}}>我是顶部通栏</p>
        </Header>
        <Router>
            <Layout>
            <Sider width={200} style={{ background: '#fff' }}>
                <Menu
                theme="dark" 
                mode="inline"
                defaultSelectedKeys={['1']}
                selectedKeys={[this.state.selectedKey]}
                style={{ height: '100%', borderRight: 0 }}
                >
                  { 
                    this.state.menuPanes.map(item=>{
                    return <Menu.Item key={item.key}><Link to={item.router} onClick={()=>this.handleClick(item)}>{item.nav}</Link></Menu.Item>
                    })
                  }
                </Menu>
            </Sider>
            <Layout style={{ padding: '0 24px 24px',margin: '0 0 10px', minHeight: 600  }} >
                <Tabs
                    onChange={this.onChange.bind(this)}
                    activeKey={this.state.activeKey}
                    type="editable-card"
                    onEdit={this.onEdit}
                >
                {
                    this.state.panes && this.state.panes.map(pane => {
                    let Component = pane.content
                    return <TabPane tab={pane.title} key={pane.key}  closable={pane.closable}>
                             <Component />
                           </TabPane>})
                  }
                </Tabs>
            </Layout>
            </Layout>
        </Router>
      </Layout>
    }
}
export default Layout1

标签: react Ant EA re

实例下载地址

react+antd+mune+tab联动

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警