React四级菜单怎么实现
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本文小编为大家详细介绍"React四级菜单怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"React四级菜单怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效
千家信息网最后更新 2025年11月15日React四级菜单怎么实现
本文小编为大家详细介绍"React四级菜单怎么实现",内容详细,步骤清晰,细节处理妥当,希望这篇"React四级菜单怎么实现"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
效果图
JS
import { Fragment, useState } from 'react';import styles from './style.less';const data1 = [ { name: '人口', id: 1, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '社会矛盾', id: 2, arr: [ { name: '嘻嘻哈哈', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '大联勤', id: 3, arr: [{ name: '预警文案', id: 1, type: 1 }] }, { name: '社会舆情', type: 3, id: 4, arr: [{ name: '预警文案', id: 1, type: 1 }], }, { name: '12345', id: 5, arr: [{ name: '预警文案', id: 1, type: 1 }] },];const data2 = [ { name: '人口', id: 1, type: 2, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 6, type: 3 }, ], }, { name: '社会矛盾', id: 2, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '大联勤', id: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], },];const data3 = [ { name: 'GDP', type: 3, id: 1, arr: [ { name: '龙哥第一', id: 1, type: 1 }, { name: '涛涛第二', id: 2, type: 2 }, { name: '余畅第一', id: 3, type: 3 }, { name: '阿川', id: 4, type: 4 }, { name: '宇宙', id: 5, type: 5 }, { name: '第一', id: 6, type: 6 }, ], }, { name: '财政税收', type: 2, id: 2, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '产业投资', id: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '产业投资', id: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '产业投资', id: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], },];const data4 = [ { name: '人口', id: 1, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '社会矛盾', id: 2, type: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '大联勤', id: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '社会舆情', id: 4, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '12345', id: 5, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], },];const data5 = [ { name: '人口', id: 1, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, ], }, { name: '社会矛盾', id: 2, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '大联勤', id: 3, type: 2, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], },];const data6 = [ { name: 'GDP', id: 1, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '财政税收', id: 2, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '产业投资', type: 2, id: 3, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '产业投资', type: 1, id: 4, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], }, { name: '产业投资', type: 1, id: 5, arr: [ { name: '预警文案', id: 1, type: 1 }, { name: '预警文案', id: 2, type: 2 }, { name: '预警文案', id: 3, type: 3 }, { name: '预警文案', id: 4, type: 4 }, { name: '预警文案', id: 5, type: 5 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, { name: '预警文案', id: 6, type: 6 }, ], },];const getRandomIntInclusive = (min, max) =>{ min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min;};const index = () =>{ const [menuId1, setMenuId1] = useState(1); // 菜单1的按钮切换 const [menuTop1, setMenuTop1] = useState(data1[0]); const [menuId2, setMenuId2] = useState(1); // 菜单2的按钮切换 const [menuTop2, setMenuTop2] = useState(data2[0]); const [menuId3, setMenuId3] = useState(1); // 菜单3的按钮切换 const [menuTop3, setMenuTop3] = useState(data3[0]); const [menuId4, setMenuId4] = useState(1); // 菜单4的按钮切换 const [menuTop4, setMenuTop4] = useState(data4[0]); const [menuId5, setMenuId5] = useState(1); // 菜单5的按钮切换 const [menuTop5, setMenuTop5] = useState(data5[0]); const [menuId6, setMenuId6] = useState(1); // 菜单6的按钮切换 const [menuTop6, setMenuTop6] = useState(data6[0]); // 标题的点击事件 const titleClick1 = (data) => { setMenuTop1(data); }; const titleClick2 = (data) => { setMenuTop2(data); } const titleClick3 = (data) => { console.log(data, '1111'); setMenuTop3(data); } const titleClick4 = (data) => { setMenuTop4(data); } const titleClick5 = (data) => { setMenuTop5(data); } const titleClick6 = (data) => { setMenuTop6(data); } const changeColor = (type) => { let lan = 'https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=624d513511001e31b43f07a3' let hui = 'https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=624d50ebfd73383908ca4506' let hong = 'https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=624d50a4b5b1ce5fbbe3ce07' let huang = 'https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=624d511322a0c670476cddc2' return type === 2 ? hui : type === 3 ? hong : type === 4 ? huang : lan } const widthAndHigh = (type) => { let random = getRandomIntInclusive(83, 99); let padding = null; let fontSize = null; let backgroundImage = `url(${changeColor(type)})` if (random >= 93) { padding = '26px'; fontSize = '16px'; } else if (random >= 83) { padding = '26px'; fontSize = '14px'; } else { padding = '26px'; fontSize = '18px'; } let size = { width: random, height: random, padding, fontSize, backgroundImage }; return size; }; // 根据类型判断背景颜色高亮 const fadeActive = (type) => { return type === 2 ? styles.fadeHui : type === 3 ? styles.fadeHong : type === 4 ? styles.fadeHuang : styles.lan } return ( {/* 小球球 */} {/* 开始~ */} {menuTop1.arr.map((data, index) => ( {data.name} ))} {menuTop2.arr.map((data, index) => ( {data.name} ))} {menuTop3.arr.map((data, index) => ( {data.name} ))} {menuTop4.arr.map((data, index) => ( {data.name} ))} {menuTop5.arr.map((data, index) => ( {data.name} ))} {menuTop6.arr.map((data, index) => ( {data.name} ))} {/* 结束~ */} {data1.map((data, index) => ( { titleClick1(data); }} key={index} > {data.name} {/* 背景线 */} ))} {data2.map((data, index) => ( { titleClick2(data); }} key={index}> {data.name} ))} {data3.map((data, index) => ( { titleClick3(data); }} key={index}> {data.name} ))} {data4.map((data, index) => ( { titleClick4(data); }} key={index}> {data.name} ))} {data5.map((data, index) => ( { titleClick5(data); }} key={index}> {data.name} ))} {data6.map((data, index) => ( { titleClick6(data); }} key={index}> {data.name} ))} );};export default index;CSS
.wrap { position: relative; transform-origin: 0px 0px; transform: scale(.5); // 压缩盒子 width: 3166px; height: 1440px; background: url('https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=624d4f5dfd73383908ca4505') no-repeat; background-size: 100% 100%; display: flex; justify-content: center;}.container { position: absolute; position: relative; width: 786px; height: 786px; margin-top: 403px; border-radius: 50%; // 底部公共文字 .centerName { display: inline-block; position: relative; margin: 2px 0 2px 46px; font-size: 19px; font-family: Source Han Sans CN-Regular, Source Han Sans CN; font-weight: 400; color: #FFFFFF; cursor: pointer; .fade { // display: none; position: absolute; top: 9px; width: 100%; height: 25px; border-radius: 2px; } // 高亮灰 .fadeHui { background: linear-gradient(rgba(227, 229, 230, 0), rgba(238, 239, 240, 0.2549019607), rgba(120, 127, 134, 0.56470588), rgba(120, 127, 134, 0.56470588), rgba(191, 195, 198, 1)); } // 高亮红 .fadeHong { background: linear-gradient(rgba(113, 56, 21, 0), rgba(222, 56, 6, 0.4117647058823), rgba(249, 67, 2, 0.423529411764), rgba(255, 122, 74, 0.9568627450)); } // 高亮黄 .fadeHuang { background: linear-gradient(rgba(113, 99, 21, 0), rgba(222, 156, 6, 0.411764705882), rgba(249, 163, 2, 0.423529411764), rgba(255, 234, 74, 0.95686274509)); } } .center1 { transform: rotate(-27deg); position: absolute; // position: relative; left: 65px; top: 40px; width: 337px; height: 176px; padding: 2px; .centerName:first-child { position: absolute; top: 25px; left: 155px; margin: auto; transform: rotate(-2deg); } .centerName:nth-child(2) { position: absolute; top: 33px; left: 227px; margin: auto; transform: rotate(9deg); } .centerName:nth-child(3) { position: absolute; top: 87px; left: 43px; margin: auto; transform: rotate(-15deg); } .centerName:nth-child(4) { position: absolute; top: 68px; left: 137px; margin: auto; transform: rotate(-3deg); } .centerName:nth-child(5) { position: absolute; top: 75px; left: 240px; margin: auto; transform: rotate(12deg); } } .center2 { display: inline-block; transform: rotate(-90deg); position: absolute; left: -33px; top: 318px; width: 337px; height: 176px; padding: 2px; .centerName:first-child { position: absolute; top: 7px; left: 53px; margin: auto; transform: rotate(-15deg); } .centerName:nth-child(2) { position: absolute; top: -3px; left: 140px; margin: auto; transform: rotate(-1deg); } .centerName:nth-child(3) { position: absolute; top: 14px; left: 251px; margin: auto; transform: rotate(17deg); } } .center3 { // transform: rotate(43deg); // position: absolute; // left: 0px; // bottom: 0px; // width: 337px; // height: 176px; // padding: 2px; transform: rotate(32deg); position: absolute; left: 48px; bottom: 0px; width: 337px; height: 176px; padding: 2px; .centerName:nth-child(5) { // transform: rotate(10deg); // position: absolute; // left: 0px; // bottom: -19px; // width: 337px; // height: 176px; // padding: 2px; transform: rotate(16deg); position: absolute; left: -12px; bottom: 135px; padding: 2px; } .centerName:nth-child(4) { // position: absolute; // top: -7px; // left: 149px; // margin: auto; // transform: rotate(-5deg); position: absolute; top: 22px; left: 134px; margin: auto; transform: rotate(1deg); } .centerName:nth-child(3) { // position: absolute; // top: -35px; // left: 250px; // margin: auto; // transform: rotate(-28deg); position: absolute; top: 7px; left: 228px; margin: auto; transform: rotate(-18deg); } .centerName:nth-child(2) { // position: absolute; // top: 37px; // left: 56px; // margin: auto; // transform: rotate(5deg); position: absolute; top: 56px; left: 39px; margin: auto; transform: rotate(13deg); } .centerName:nth-child(1) { // position: absolute; // top: 35px; // left: 176px; // margin: auto; // transform: rotate(-1deg); position: absolute; top: 62px; left: 166px; margin: auto; transform: rotate(-1deg); } } .center4 { transform: rotate(-33deg); position: absolute; left: 413px; bottom: -22px; width: 337px; height: 176px; padding: 2px; .centerName:nth-child(5) { position: absolute; top: -8px; left: 63px; margin: auto; transform: rotate(9deg); } .centerName:nth-child(2) { position: absolute; top: 30px; left: 49px; margin: auto; transform: rotate(7deg); } .centerName:nth-child(3) { position: absolute; top: -8px; left: 226px; margin: auto; transform: rotate(-13deg); } .centerName:nth-child(4) { position: absolute; top: 3px; left: 138px; margin: auto; transform: rotate(1deg); } .centerName:nth-child(1) { position: absolute; top: 44px; left: 163px; margin: auto; transform: rotate(-3deg); } } .center5 { transform: rotate(94deg); position: absolute; right: -155px; top: 318px; width: 337px; height: 176px; .centerName:first-child { position: absolute; top: 150px; left: 38px; margin: auto; transform: rotate(-15deg); } .centerName:nth-child(2) { position: absolute; top: 131px; left: 118px; margin: auto; transform: rotate(-5deg); } .centerName:nth-child(3) { position: absolute; top: 139px; left: 222px; margin: auto; transform: rotate(17deg); } } .center6 { display: inline-block; transform: rotate(33deg); position: absolute; right: 90px; top: 84px; width: 337px; height: 176px; padding: 2px; .centerName:first-child { position: absolute; top: -18px; left: 138px; margin: auto; transform: rotate(-3deg); } .centerName:nth-child(2) { position: absolute; top: -8px; left: 223px; margin: auto; transform: rotate(15deg); } .centerName:nth-child(3) { position: absolute; top: 42px; left: 43px; margin: auto; transform: rotate(-15deg); } .centerName:nth-child(4) { position: absolute; top: 27px; left: 134px; margin: auto; transform: rotate(1deg); } .centerName:nth-child(5) { position: absolute; top: 40px; left: 240px; margin: auto; transform: rotate(20deg); } }}// 相对于中间定位.ballBox { position: absolute; position: relative; width: 100%; height: 100%; .childName { display: flex; align-items: center; text-align: center; margin: 5px; width: 83px; height: 82px; border-radius: 50%; text-align: center; padding: 15px; color: #fff; background-size: 100% 100%; } .childNameEven { padding: 18px; } .childNameOdd { margin-top: 10px; } // 小球球 .ball { position: absolute; position: relative; display: flex; justify-content: center; flex-wrap: wrap; width: 500px; height: 250px; padding: 30px; } .ball1 { left: -102px; top: -179px; transform: rotate(-29deg); } .ball2 { left: -349px; top: 13px; transform: rotate(-90deg); } .ball3 { left: -91px; top: 188px; transform: rotate(29deg); } .ball4 { left: 384px; top: -55px; transform: rotate(-29deg); } .ball5 { left: 642px; top: -722px; transform: rotate(90deg); } .ball6 { left: 394px; top: -1424px; transform: rotate(29deg); } .child { display: none; position: absolute; position: relative; display: flex; justify-content: center; flex-wrap: wrap; left: -220px; top: -300px; width: 500px; height: 250px; padding: 30px; .childName { display: flex; // justify-content: center; align-items: center; text-align: center; margin: 5px; // display: inline-block; width: 83px; height: 82px; border-radius: 50%; background-color: red; text-align: center; padding: 15px; } .childNameEven { display: flex; // justify-content: center; align-items: center; text-align: center; margin: 5px; // display: inline-block; // width: 80px; // height: 80px; // font-size: 16px; border-radius: 50%; background-color: red; text-align: center; padding: 18px; background: url('https://www.dataojocloud.com/dataeye/v1/data/image/get?imageid=624d50a4b5b1ce5fbbe3ce07') no-repeat center; background-size: 100% 100%; color: #fff; } .childNameOdd { display: flex; // justify-content: center; align-items: center; text-align: center; margin: 5px; // display: inline-block; // width: 83px; // height: 83px; // padding: 18px; // font-size: 14px; border-radius: 50%; background: url('../../assets/shengtaihuanjing/lan.png') no-repeat center; background-size: 100% 100%; text-align: center; margin-top: 10px; color: #fff; } }}读到这里,这篇"React四级菜单怎么实现"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
文案
预警
菜单
产业
按钮
社会
切换
投资
矛盾
人口
高亮
文章
内容
小球
税收
背景
舆情
财政
嘻嘻
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中国矿业大学移动软件开发
endnote 更新数据库
数据库sql server备份还原
酒店网络技术主要干什么
软件开发专用台式机
广东程序软件开发哪家正规
结合电子商务的网络技术
涪陵区提供网络技术诚信服务
软件开发十大模型百度文库
邯郸网络安全协会
网络技术发展阶段有几个
香港铸博皇御贵金属服务器名称
广州美齐网络技术有限公司
网络安全教育征文100字
火山安卓程序数据库
网络安全内容手抄报有哪些
霸州廊坊用友网络技术
服务器启动芯片
金蝶旗舰版加密系统服务器未启动
自学网络安全工程师课程有哪些
charles看数据库
怪物猎人世界各服务器怎么解锁
联系数据库在哪里
软件开发实习日记作文
基础设施数据库数据池
服装设计和网络技术哪个专业好
金蝶旗舰版加密系统服务器未启动
保健食品 数据库
成都软件开发驻场价格表
市网络安全宣传周宣传片