antd源码解析——在线换肤功能
Posted chenzxl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了antd源码解析——在线换肤功能相关的知识,希望对你有一定的参考价值。
琐碎的前言
组内需要搭建一个内部组件演示平台,就去研究了下ant-design的源码。意外发现了藏在最下方友情链接栏中的换肤功能。如下图所示:
为了方便演示,我把colorpicker的position改为fixed
colorpicker
调用方式
<ColorPicker
type="sketch"
small
color={color}
position="top"
presetColors={[
‘#F5222D‘,
‘#EB2F96‘,
...
]}
onChangeComplete={this.handleColorChange}
/>
复制代码
事件监听
下面是监听colorpicker的onChangeComplete事件的回调
handleColorChange = (color) => {
const changeColor = () => {
const { intl: { messages } } = this.props;
window.less.modifyVars({ // 关键步骤,修改less颜色变量值
‘@primary-color‘: color,
}).then(() => {
message.success(messages[‘app.footer.primary-color-changed‘]); // 通知换肤成功
this.setState({ color }); // 回填颜色值
});
};
const lessUrl = ‘https://cdnjs.cloudflare.com/ajax/libs/less.js/2.7.2/less.min.js‘;
// lessLoaded 用来标志 less.js 是否已加载,没有则去请求
if (this.lessLoaded) {
changeColor();
} else {
window.less = {
async: true, // 设为异步加载
};
loadScript(lessUrl).then(() => {
this.lessLoaded = true;
changeColor();
});
}
}
复制代码
elements
color.less中就存放了less颜色变量(@primary-color),每次修改颜色后都会去重置对应less变量,编译出新的css样式
less.modifyVars()
官网解释:Enables run-time modification of Less variables. When called with new values, the Less file is recompiled without reloading.
换肤最关键的一步就是less.modifyVars()的调用,主要是针对less变量的修改覆盖。用法如下:
less.modifyVars({
‘@buttonFace‘: ‘#5B83AD‘,
‘@buttonText‘: ‘#D9EEF2‘
});
复制代码
更多less用法
作者:byteQiu
链接:https://juejin.im/post/5b63b2ece51d4519185376fa
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
以上是关于antd源码解析——在线换肤功能的主要内容,如果未能解决你的问题,请参考以下文章