成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

react怎么實現三級菜單

react實現三級菜單的方法:1、創建展開三級父級菜單的方法為“onOpenChange = (openKeys) => {…}”;2、通過“handleSelectkeys(e){…}”設置選中狀態;3、通過“oli.push(<Menu.Item key={…})實現生成側邊欄即可。

react怎么實現三級菜單

本教程操作環境:Windows10系統、react18.0.0版、Dell G3電腦。

react怎么實現三級菜單?

react + antd實現只展開一個父級菜單欄的側邊欄(三級菜單欄)

工作中遇到一個需求,三級側邊欄只能展開一個父級菜單欄,保持頁面簡潔,提高用戶體驗,也是在網上查了很久,也沒有完全符合要求的,就結合他人的自己寫了一個。。。。

展開三級父級菜單的方法

onOpenChange = (openKeys) => {         const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1);         let openList;         if(this.state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {             if(latestOpenKey&&latestOpenKey.length===3){                 openList = this.state.openKeys.filter((e)=>{                     return e.length!==3;                 })                 this.setState({                     openKeys:openList                });             }else{                 this.setState({                     openKeys:openKeys                });             }                    }else{             if(latestOpenKey&&latestOpenKey.length===3){                 openList = this.state.openKeys.filter((e)=>{                     return e.length!==3;                 })                 openList.push(latestOpenKey);                 this.setState({                     openKeys:openList[1] ? openList : [openList[0],openList[2]]                 });             }else{                 this.setState({                     openKeys: latestOpenKey ? [latestOpenKey] : [],                 });             }                     }     }
登錄后復制

設置選中狀態

 handleSelectkeys(e){         if(this.state.isShow){             this.setState({                  selectedKey:e.key,                 openKeys:e.keyPath[length] == 3  ? [e.keyPath[2],e.keyPath[1]] : [e.keyPath[0]],                 isShow:true              });          }            }
登錄后復制

生成側邊欄

const data = this.props.list;         var html = [];         for(var i=0;i<data.length;i++){             if(data[i].children){                 var li = []                 for(var j=0;j<data[i].children.length;j++){                     var liData = data[i].children[j];                     if(liData.children){                         var oli = [];                         for(var k=0;k<liData.children.length;k++){                             oli.push(                                 <Menu.Item key={liData.children[k].url}>                                     <Link to={                                         {                                             pathname:liData.children[k].url,                                             state:{//三級菜單下傳openKeys傳兩個值,展開兩級                                                 parent:this.state.openKeys[0],                                                 child:this.state.openKeys[1]                                             }                                         }                                     }>                                         <span>{liData.children[k].text}</span>                                     </Link>                                 </Menu.Item>                             )                         }                         var oul = <SubMenu key={liData.id} title={<span>{liData.iconCls && <Icon type={liData.iconCls} />}<span>{liData.text}</span></span>}>{oli}</SubMenu>;                         li.push(oul);                     }else{                         li.push(                             <Menu.Item key={liData.url}>                                 <Link to={                                     {                                         pathname:liData.url,                                         state:{//二級菜單下openKeys傳一個值,展開一級                                             parent:this.state.openKeys[0],                                             // child:this.state.openKeys[1] ? this.state.openKeys[1] : ''                                         }                                     }                                                                          } >                                     {liData.iconCls && <Icon type={liData.iconCls} />}                                     <span>{liData.text}</span>                                 </Link>                             </Menu.Item>                         );                     }                 }                 var ul = <SubMenu key={data[i].id} title={<span>{data[i].iconCls && <Icon type={data[i].iconCls} />}<span>{data[i].text}</span></span>}>{li}</SubMenu>;                 html.push(ul);             }else{                 html.push(                     <Menu.Item key={data[i].url}>                         <Link to={                                                        {                                 pathname:data[i].url,                                 state:{//一級菜單下傳空值,不展開菜單欄                                     parent:''                                 }                             }                             } >                             {data[i].iconCls && <Icon type={data[i].iconCls} />}                             <span>{data[i].text}</span>                         </Link>                     </Menu.Item>                 )             }         }
登錄后復制

側邊欄組件Menu.js 全部代碼

import React from 'react'import { Menu,Icon } from 'antd';import {Link,withRouter} from 'react-router-dom'const { SubMenu } = Menu;   class Menus extends React.Component{     constructor(props){         super(props)         this.state={             openKeys:['1','100'],             rootSubmenuKeys:[],             selectedKeys:[this.props.history.location.pathname], //選中             isShow:false //判斷是否已經展開,如已展開停止重新賦值避免重新渲染和關系菜單                  }         this.handleSelectkeys = this.handleSelectkeys.bind(this)     }     UNSAFE_componentWillMount(){         if(this.props.location.state){             this.setState({                 openKeys:[this.props.location.state.parent,this.props.location.state.child ? this.props.location.state.child : '']             })                    }                  }     componentDidMount(props,nextProps){         var data = this.props.list;         for(var i=0;i<data.length;i++){             if(data[i].children){                 for(var j=0;j<data[i].children.length;j++){                     var liData = data[i].children[j];                     if(liData.children){                         this.state.rootSubmenuKeys.push(liData.id+"");                     }                 }                 this.state.rootSubmenuKeys.push(data[i].id+"");             }         }         // 刷新菜單更新默認狀態         const { pathname } = this.props.history.location;         const rank = pathname.split('/')         switch (rank.length) {           case 2 :  //一級目錄             this.setState({               selectedKeys: [pathname]             })             break;           case 5 : //三級目錄,要展開兩個subMenu             this.setState({               selectedKeys: [pathname],                          })             break;           default :             this.setState({               selectedKeys: [pathname],             })         }                 // 瀏覽器前進后退按鈕更新菜單狀態         if (window.history && window.history.pushState) {             window.onpopstate = function () {                 window.location.reload(true); //刷新頁面             };         }     }     handleSelectkeys(e){         if(this.state.isShow){             this.setState({                  selectedKey:e.key,                 openKeys:e.keyPath[length] == 3  ? [e.keyPath[2],e.keyPath[1]] : [e.keyPath[0]],                 isShow:true              });          }            }     onOpenChange = (openKeys) => {         const latestOpenKey = openKeys.find(key => this.state.openKeys.indexOf(key) === -1);         let openList;         if(this.state.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {             if(latestOpenKey&&latestOpenKey.length===3){                 openList = this.state.openKeys.filter((e)=>{                     return e.length!==3;                 })                 this.setState({                     openKeys:openList                });             }else{                 this.setState({                     openKeys:openKeys                });             }                    }else{             if(latestOpenKey&&latestOpenKey.length===3){                 openList = this.state.openKeys.filter((e)=>{                     return e.length!==3;                 })                 openList.push(latestOpenKey);                 this.setState({                     openKeys:openList[1] ? openList : [openList[0],openList[2]]                 });             }else{                 this.setState({                     openKeys: latestOpenKey ? [latestOpenKey] : [],                 });             }                     }     }     render(){         const data = this.props.list;         var html = [];         for(var i=0;i<data.length;i++){             if(data[i].children){                 var li = []                 for(var j=0;j<data[i].children.length;j++){                     var liData = data[i].children[j];                     if(liData.children){                         var oli = [];                         for(var k=0;k<liData.children.length;k++){                             oli.push(                                 <Menu.Item key={liData.children[k].url}>                                     <Link to={                                         {                                             pathname:liData.children[k].url,                                             state:{//三級菜單下傳openKeys傳兩個值,展開兩級                                                 parent:this.state.openKeys[0],                                                 child:this.state.openKeys[1]                                             }                                         }                                     }>                                         <span>{liData.children[k].text}</span>                                     </Link>                                 </Menu.Item>                             )                         }                         var oul = <SubMenu key={liData.id} title={<span>{liData.iconCls && <Icon type={liData.iconCls} />}<span>{liData.text}</span></span>}>{oli}</SubMenu>;                         li.push(oul);                     }else{                         li.push(                             <Menu.Item key={liData.url}>                                 <Link to={                                     {                                         pathname:liData.url,                                         state:{//二級菜單下openKeys傳一個值,展開一級                                             parent:this.state.openKeys[0],                                             // child:this.state.openKeys[1] ? this.state.openKeys[1] : ''                                         }                                     }                                                                          } >                                     {liData.iconCls && <Icon type={liData.iconCls} />}                                     <span>{liData.text}</span>                                 </Link>                             </Menu.Item>                         );                     }                 }                 var ul = <SubMenu key={data[i].id} title={<span>{data[i].iconCls && <Icon type={data[i].iconCls} />}<span>{data[i].text}</span></span>}>{li}</SubMenu>;                 html.push(ul);             }else{                 html.push(                     <Menu.Item key={data[i].url}>                         <Link to={                                                        {                                 pathname:data[i].url,                                 state:{//一級菜單下傳空值,不展開菜單欄                                     parent:''                                 }                             }                             } >                             {data[i].iconCls && <Icon type={data[i].iconCls} />}                             <span>{data[i].text}</span>                         </Link>                     </Menu.Item>                 )             }         }         return (             <Menu                  openKeys={this.state.openKeys}                 selectedKeys={[this.props.history.location.pathname]}                 onClick={this.handleSelectkeys}                 onOpenChange={this.onOpenChange}                 mode="inline"                 theme="dark"                 collapsed={this.state.collapsed}>                 {html}             </Menu>         )     }}export default withRouter(Menus);
登錄后復制

側邊欄數據 menu.js

const list = [   {       "id":1,       "text":"檢查清單",       "state":"closed",       "iconCls":"home",       "children":[           {               "id":100,               "text":"按月檢查",               "checked":false,               "state":"closed",               "iconCls":"",               "url":"/platform/check/month"           },           {               "id":101,               "text":"按年檢查",               "checked":false,               "state":"closed",               "iconCls":"",               "url":"/platform/check/year"           }       ]      },   {       "id":2,       "text":"數據預覽導出",       "iconCls":"laptop",       "state":"closed",       "checked":true,       "children":[           {               "id":200,               "text":"做的書",               "iconCls":"",               "state":"closed",               "checked":true,               "children":[                   {                       "id":20001,                       "text":"2018做的書",                       "iconCls":" ",                       "url":"/platform/export/makeBook/2018"                   },                   {                       "id":20002,                       "text":"2019做的書",                       "iconCls":" ",                       "url":"/platform/export/makeBook/2019"                   },                   {                       "id":20003,                       "text":"2020做的書",                       "iconCls":" ",                       "url":"/platform/export/makeBook/2020"                   }               ]           },           {               "id":201,               "text":"財務收入",               "iconCls":"",               "state":"closed",               "checked":true,               "children":[                   {                       "id":20101,                       "text":"2018財務收入",                       "iconCls":" ",                       "url":"/platform/export/GMV/2018"                   },                   {                       "id":20102,                       "text":"2019財務收入",                       "iconCls":" ",                       "url":"/platform/export/GMV/2019"                   },                   {                       "id":20103,                       "text":"2020財務收入",                       "iconCls":" ",                       "url":"/platform/export/GMV/2020"                   },               ]           },           {               "id":202,               "text":"財務支出",               "iconCls":"",               "state":"closed",               "checked":true,               "children":[                   {                       "id":20201,                       "text":"2018財務支出",                       "iconCls":" ",                       "url":"/platform/export/expend/2018"                   },                   {                       "id":20202,                       "text":"2019財務支出",                       "iconCls":" ",                       "url":"/platform/export/expend/2019"                   },                   {                       "id":20203,                       "text":"2020財務支出",                       "iconCls":" ",                       "url":"/platform/export/expend/2020"                   },               ]           },          ]   },  ]class SiderNav extends React.Component {   render() {     return (          <Sider  width={230}  breakpoint  className="AdminSider">           <Menus list={list} />       </Sider>     )   }}```
登錄后復制

推薦學習:《react視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
国产AV精品一区二区三区| 拍摄AV现场失控高潮数次| AV天堂亚洲国产AV| 日产乱码一二三区别免费影视| 国产DB624色谱柱36521| 为了升职丈夫把我献给他们领导 | 久久99国产综合精品| 无码人妻一区二区三区密桃手机版| 国产成人无码AⅤ片在线观看你 | 国产精品无码AV不卡| 亚洲MV砖码砖区2021在线| 国产精品乱码一区二区三| 亚洲AV日韩综合一区久热| 幻女FREE性俄罗斯毛片福| 亚洲午夜久久久久妓女影院| 狠狠88综合久久久久综合网| 亚洲欧美成人久久综合中文网| 老熟妇愉情MAGNET洗澡| AV免费啪啪永久| 欧美自拍亚洲综合在线| 成熟丰满熟妇高潮XXXXX| 色99久久久久高潮综合影院| 国产精品亚洲片在线| 亚洲国产成人久久综合一区77| 军人暴力性强迫RAPE| 八戒.八戒电影免费观看| 日韩精品一区二区三区色欲AV| 国产精品欧美福利久久| 亚洲午夜理论无码电影| 浪货趴办公桌~H揉秘书电影无码| JZZIJZZIJ在线观看亚洲| 玩弄JAPAN白嫩少妇HD小说| 久久久久久A亚洲欧洲AV冫| 97国语精品自产拍在线观看一| 视频在线一区二区三区| 精品无码人妻少妇久久久久久 | 蜜臀av一区二区三区久久 | 班长哭着说不能再C了视频| 私人小影院久久久影院| 国色天香精品一卡2卡3卡老狼| 51CG9热心的朝阳群众| 色欲AV永久无码精品无码蜜桃 | 特级做A爰片毛片免费看无码| 国产精品V无码A片在线看| 一女多男双修NP古言| 四虎国产精品永久在线| 久久97久久精品免费观看黑人 | 免费SM虐女调教网站视频| 精品乱子伦一区二区三区| ASIAN日本裸体PICS| 漂亮人妻去按摩被按中出| 国产曰的好深好爽免费视频| 亚洲一线产区二线产区区别在 | 国产亚洲欧美精品一区| 中国XMXM18小孩的推荐机制| 洗澡被公强奷30分钟视频| 秋霞午夜成人久久电影网| 久久99精品久久久久久久久久 | 亚洲真人无码永久在线观看| 欧美18ⅩXOO极品| 国产巨大爆乳在线观看| 一本久道久久综合狠狠老| 偷窥无罪之诱人犯罪| 久久久久亚洲AV无码专区体验| 高潮喷视频在线无码| 2018最新国产好看的国产| 亚洲AV无码乱码国产精品FC2| 妺妺窝人体色www聚色窝图| 国产H视频在线观看| 中国少妇初尝黑人巨高清| 少妇内射一区27p| 女儿国在线观看免费版高清 | 日韩精品真人荷官无码| 老妇饥渴XXHDⅩXXOOO| 国内精品久久久久久无码| 丰满日韩放荡少妇无码视频| 50岁露脸老熟女88AV| 亚洲人成色777777网站| 特级毛片AAAAAA| 人妻办公室内上司侵犯| 久久国产精品日本波多野结衣| 国产精品视频一区二区三区无码| 被多个男人调教奶头玩奶头| 18国产精品白浆在线观看免费| 亚洲鲁丝片一区二区三区| 我和岳交换夫妇爽| 日本一区二区三区免费播放 | 亚洲AV永久无无码精品一区二区| 无码成人黄动漫在线观看| 四季AV无码专区AV浪潮| 漂亮人妻洗澡被公强啪啪| 久久人妻少妇偷人精品综合桃色| 国产精品亚洲日韩欧美色窝窝色欲| 粉嫩小泬流出白浆| 粉嫩AV一区二区精品爆乳| 成人网站国产在线视频内射视频| 中文在线А√在线| 亚洲日韩欧美成人一区二区三区 | 国产成人无码精品XXXX| 波多野结衣AV一区二区三区中文 | 小妖精抬起臀嗯啊H军人| 无码人妻久久久一区二区三区免费| 少妇呻吟喷水视频正在播放| 揉着我的奶从后面进去| 日韩在线 | 中文| 日日噜噜夜夜狠狠视频| 色一情一乱一伦一区二区三区日本 | 人人妻人人澡人人爽超污| 日本成熟少妇喷浆在线观看| 日本久久夜夜一本婷婷| 免费无码又爽又刺激高潮的漫画| 免费A级毛片波多野结衣| 看全色黄大色黄大片 视频| 久久久久精品少妇9999| 老外免费CSGO交易网站下载| 免费无遮挡无码永久在线观看视频 | 天天摸天天透天天添| 无码日韩精品一区二区免费| 亚洲AV秘 无码一区二黑人| 亚洲另类春色国产精品| 影音先锋亚洲成AⅤ无码| 98人妻人人揉人人躁88Av| 被黑人伦流澡到高潮HNP动漫| XXXX性×XX老少配| 国产成人无码精品午夜福利A| 国产无遮挡无码视频免费软件| 国产裸体裸美女无遮挡网站| 精品人妻少妇一区二区三区夜夜嗨 | 42岁女子20天断崖式衰老| 啊灬啊别停灬用力啊公视频| 香港三日本三级少妇三级2021| 精品无人区麻豆乱码1区2区| 里面也请好好疼爱漫画最新章节 | 免费人成在线观看网站品善网| 三上悠亚AV影院在线看| 亚洲AV无码一区二区二三区软件| 制服丝袜长腿无码专区第一页| 成人国产精品一区二区网站 | 亚洲AV无码专区国产乱码波多野| 夜夜春夜夜爽一区二区三区| 亚洲综合网站色欲色欲| 国产成人亚洲精品无码车A| 精品熟人妻一区二区三区在线 | 日韩人妻无码精品专区| 无码AV在线一区二区| 又色又爽又黄的视频APP软件下 | 国产成人亚洲综合A∨| 国产在线无码一区二区三区 | 99久久国产综合精品麻豆 | 久久久久亚洲精品无码网址色欲| 久久婷婷色五月综合图区| 美女露100%双奶头无遮挡图片| 人妻AV一区二区三区精品| 婷婷开心色四房播播| 亚洲国产成人精品无码区在线播放| 亚洲日本一线产区和二线产| 99精品无人区乱码在线观看| 国产精品免费高清在线观看| 日本亚洲色大成网站www久久 | 久久久久亚洲AV成人网| 欧美精品少妇XXXXⅩ另类| 色欲av伊人久久大香线蕉影院| ZOOM另一类ZZO0| 人妻无码熟妇乱又视频| 丁香花在线观看视频在线| 被夫上司强迫的女人在线中文| А天堂最新版中文网| JIZZJIZZ无码中国在线观| GOGO全球高清大尺度视频| BGMBGMBGM老妇60岁| HEYZO高清中文字幕在线| JAPANESE护士高潮SEX| WWW国产无套内射COM| А√天堂8在线官网| 啊轻点都日出水来了| 在线观看无码AV网站永久免费| 俄罗斯卖CSGO的网站免费进入| 老公和小三在车上做我想卖了车| 日韩精品区一区二区三VR | 亚洲AV无码国产精品色午夜| 91人人妻人人澡人人爽超污| 国产精选午睡沙发系列999| 久久午夜夜伦鲁鲁片免费无码影院 | AV无码爆乳护士在线播放| 激情男女高潮射精AV免费| 玩弄JaPan白嫩少妇HD小说| 成熟交BGMBGMBGM的价格| 麻豆XXXXXX在线观看| 亚洲色欲综合天堂亚洲| 国产在线精品二区| 同桌上课脱裙子让我帮他自慰| 成 人 黄 色 网站 S色| 麻豆视频传媒入口| 影音先锋无码A∨男人资源站| 精品久久久久久亚洲精品| 性孕交大肚子孕妇| 国产精品久久国产精麻豆99网站| 四季亚洲精品成人AV无码网站| 公交车上摸到花蒂进去了视频| 爽到高潮无码视频在线观看 |