上节课我们介绍了如何在脚手架中使用antd
的时候能够按需引入样式,这节课我们来说一说,使用antd
如何能够自定义主题。
回顾
在开始这节课的内容之前,我们来对上节课的内容来做一个简单的回顾。
- 不能一次性直接引入所有
UI
组件的样式,需要按需引入 - 按需引入样式需要修改脚手架默认配置
- 我们需要借助
react-app-rewired
,customize-cra
以及babel-plugin-import
库来完成按需引入
以上便是我们上节课的主要要点,这些东西其实也不需要死记,因为一个项目是不是也就只需要配置一次按需引入的支持啊,所以说大家了解了就好,而且每个UI
组件库封装的都不一样,也许换了UI
组件库之后我们就要换一种方法来支持按需引入了。接下来我们开始这节课的内容。
需求背景
我们之前说过,我们的antd
的主色调是不是蓝色?而且是支付宝的蓝,毕竟这个UI
库本来就是蚂蚁金服开发出来的。但是如果我这个项目的主色调不想用蓝色的话怎么办呢?比如我们想用橙色,那么我们怎么去修改呢?
我们的小案例中那个小按钮的话,最简单的方法是不是直接到页面中,看这个按钮上都加了哪些样式,然后直接修改掉就行了?但是我们一个项目中不肯能一个一个元素去找啊。另外有一点,antd
的样式里面有些样式加了权重了,我们自己去写的话,有可能根本就没法把antd
的样式给覆盖掉。
那么我们应该这么办呢?这就得用到我们的自定义主题的操作了。这个操作的底层原理是什么呢?就是去查找到antd
底层主题颜色的变量,然后去修改掉。
自定义主题
那么我们知道了自定义主题的底层原理,那么我们应该怎么做才能够实现自定义主题呢?我们在来看官方文档,继续往下拉,在下面就有关于自定义主题的内容。
首先还是要依赖于我们之前提到的config-overrides.js
文件,而且还要依赖less
和less-loader
这两个库,那么我们来安装一下这两个库。然后我们来看一下官方给的代码:
首先还是引入依赖,比之前多了一个addLessLoader
。然后再看下面,style
属性我们这次不能写css
了,因为现在不是对css
的按需引入了,所以说我们整理改成一个bool
值,改为true
,然后再调用addLessLoader
来加载我们自定义的内容。但是这一段是什么意思呢?首先我们要允许使用js
来修改底层的less
,然后配置我们要修改的变量。
那么我们用官方给的代码来试一下看看效果:
是不是很尴尬?报错了,还是底层的错误。那么我们怎么办呢?我们来看最后面的这些错误提醒,说我们不允许使用modifyVars
了,我来问大家,是不是我们之前说4.x
版本的文档不详细使用让我们先去看3.x
版本的文档。就是这么回事儿,4.x
版本中已经不允许写现在3.x
版本中的这个写法了。那么我们应该怎么写呢?我们来看,报错提醒里面是不是说允许使用lessOptions
等等,那么这里面这几个对象是不是就只有lessOptions
看起来像一点?其实我们可以去4.x
里面看一下,既然我们在用4.x
版本的antd
,那么看旧版本的文档然后报错了,那么我们坑定要去看4.x
版本的文档啊,自己在这瞎猜什么呢啊。
官方通过craco
库来完成了按需引入和自定义主题的操作。那么我们根据官网的提示来做一下操作吧:
我们来改一下代码:
const CracoLessPlugin = require('craco-less'); module.exports = { plugins: [ { plugin: CracoLessPlugin, options: { lessLoaderOptions: { lessOptions: { modifyVars: { '@primary-color': '#1DA57A' }, javascriptEnabled: true, }, }, }, }, ], babel: { plugins: [ [ 'import', { libraryName: 'antd', libraryDirectory: 'es', style: true, } ], [ '@babel/plugin-proposal-decorators',{legacy: true} ] ] } };
这一部分官方文档是并没有,需要大家查阅babel
以及lessLoader
方面的资料。那么我们这次再来看一下效果:
这次我们便可以展示出官网上所说的哪个绿色的按钮。
总结
- 需要依赖
craco
库 - 需要依赖
craco-less
库 - 新版本和旧版本差异没有在官方文档中体现出来,大家需要自己查阅相关资料
Copyright statement:The articles of this site are all original if there is no special explanation, indicate the source please when you reprint.
Link of this article:https://work.lynchow.com/article/antd_theme/