在 umi 框架中构建 antd 的布局样式

要用组里的框架写一个后台管理界面,按照产品经理的方案,需要在默认的布局样式上做一些修改,走了一些弯路,稍微记录一下。

首先我们打开 antd 的官方文档,看看 Layout 的描述,给出的样例非常清晰易懂,大致包含顶部、边栏、内容和底部四个部分。

antd 的 Layout 介绍

但是 umi 和 ProLayout 是有联动的,按照官方的介绍:

ProLayout 与 umi 配合使用会有最好的效果,umi 会把 config.ts 中的路由帮我们自动注入到配置的 layout 中,这样我们就可以免去手写菜单的烦恼。

ProLayout 扩展了 umi 的 router 配置,新增了 name,icon,locale,hideInMenu,hideChildrenInMenu 等配置,这样可以更方便的生成菜单,在一个地方配置即可。数据格式如下

官方文档地址:

ProLayout 官方文档

OK,于是我们就可以方便的使用了,但是现在的问题是我们需要修改顶栏的样式,可能还要加一些按钮什么的,应该怎么弄?

这篇教程给出的例子都是在完整的引入情况下怎么修改,怎么在 umi 方式引入的的情况下修改部分的样式,没有说。

于是我就开始尝试在配置文件中的 layout 中试图添加属性,然后把组件绑上去,根据 ProLayout 的官方文档,都可以通过在 Render 后缀方法上绑组件来实现。

结果是残酷的,会一直报奇怪的错误,这样是不行的,不信可以自行尝试。

然后我就开始找,找了很久在 umi 的教程一个不起眼的文档里面找到了相关的内容,文档地址如下:

umi 布局配置

发现这个工具是分为构建时配置和运行时配置的,构建时还没有 dom,所以修改某个部分样式也做不到,需要 src/app.tsx 里面写一下组建的样式,这样绑定之前的 Render 结尾函数就能成功。

按照官网给的样例来写,ESLint 报了一个错:

报错内容

报错内容

这个博客说是 ESLint 不能识别 render prop pattern 导致的,解决方法就是把报错注释掉(博客地址)。

但是这种方法终究还是逼死强迫症,最后在 csdn 的一个帖子评论区查到另外一个解决方案(博客地址)。

解决方案

解决方案

完美解决问题。