一.实现左侧导航栏的二级路由
前言:本来打算是不应用antd,只想用Material UI来实现左侧导航列表的折叠伸缩成果的,后果试了一上午,只能感叹不得不抵赖还是antd封装的后盾管理系统欠缺。
尽管应用MaUI也实现了相干的一些搭配,不过它封装的成果不够欠缺,它是利用<collapes>
独自的组件搭配<ListItem>
的onclick事件管制某个状态的变动操作<collapes>
中的in
属性的变动,来实现折叠伸缩的成果,然而很坑的是如果你想把整个右边菜单栏用数组渲染进去的时候,就会发现一个问题,某个列表的点击事件会把所有的列表全副开展,因为渲染列表的时候所有的<collapes>的in
属性共用着一个状态,上面是我只点击了·商品·这个链接呈现的成果:
这是齐全不合乎我的预期的,尽管你能够给每个<Collapse>下面的<ListItem>创立一个独自的onClick
事件,然而这是十分繁琐,不论是代码的复用性还是前面用数组渲染,都是很难治理的。(可能有好的方法然而以目前我的程度来说临时办不到,当前有机会可能会更改本篇文章)。
故果决采纳antd的组件。
因为antd把折叠关上的成果封装在了独自的组件内,所以各个组件互相都没影响
这样就清新多了.
接下来去路由表里设置二级路由。创立以下文件夹,并且创立相应的.jsx文件,别离对应咱们后续须要用到的各个局部。
在这里再强调一下:
这些路由组件,都是dashboard页面的子路由,所以咱们就路由表的<Dashboard>组件的路由上面创立子路由就能够了.
同样的情理,想用就得先引入:
顺次设置以下子路由,不要忘了children
对象的属性是一个数组。
而后去对应的中央增加<Link>标签,这里我把key换成路由门路了,这不是必须的。
(图表页面同样的情理,图片太大就不放进来了)
二.列表渲染的优化
当初尽管看到了页面的成果,然而这样的列表是死的,不不便复用。咱们须要把它通过向之前的todolist案例一样,通过数组把它渲染进去。
首先须要做的是,察看这个列表的构造,思考数组里须要有哪些值。在Config文件夹下创立siderBarList
文件夹
我晓得了须要渲染用到的变量是这些,而我的<Item>
组件的key和<Link>
组件的path是一样的,所以能够只设置一个关键词key就能够了,icon
用来寄存图标信息。
咱们先不必管折线图,先实现这一部分。
返会侧边栏组件,不须要思考,间接引入刚刚写好的变量
当初须要编写一个函数来主动选入这个数组,
1.逐渐剖析,首先须要判断这个渲染的对象是否有二级路由,如果没有,间接渲染出<Menu.Item>即可。这个和惯例的list渲染没什么区别,上面即可渲染出没有二级路由的首页或者角色治理等。
2.如果有二级路由的话,咱们就须要思考二次渲染,
这里应用了函数递归调用本身,其实这里就相当于从新写了这行代码而已,须要认真去了解一下。
看一下页面成果,并没有报错