刚开始读Ant Design4.0源码就被惊艳到了

0

cnpm start 后是这样子

image.png

没错,就是官网的样子,url路径即是文件夹路径,我之前都是复制页面上特殊的文字去找文件...

网页中的信息来自这个md文档,github显示的也是它

import { Helmet } from 'react-helmet-async';
import { FormattedMessage, injectIntl } from 'react-intl'; //多语言
import classNames from 'classnames';//处理类名

site\theme\template\Content\ComponentDoc.jsx,这个文件用来组织文档内容在网页上的呈现方式

这段代码是改变<title><meta>标签的,为了SEO


这段代码生成右侧目录

1


上面这部分以及方向性图标、提示建议性图标 等对应md中的



image.png

fields.ts

以数组形式承载 图标名称

 arr.indexOf(n) === i

数组去重


注意 下面的代码

export type Categories = typeof categories;
export type CategoriesKeys = keyof Categories;

Category.tsx

绘制方向性图标 、提示建议性图标 等


难怪我搜索不到

    'app.docs.components.icon.category.suggestion': '提示建议性图标',


justCopied 是用来控制样式的

这段代码 服务于 复制图标的效果



CopyableIcon.tsx

import CopyToClipboard from 'react-copy-to-clipboard';

注意React.createElement(allIcons[name])

import * as AntdIcons from '@ant-design/icons';
const allIcons: {
  [key: string]: any;
} = AntdIcons;

直接 {allIcons[name]} 是不行的
这个组件用了Hooks

const CopyableIcon: React.FC<CopyableIconProps> = ({

React.FC的定义文件是

    type FC<P = {}> = FunctionComponent<P>;

    interface FunctionComponent<P = {}> {
        (props: PropsWithChildren<P>, context?: any): ReactElement<any, any> | null;
        propTypes?: WeakValidationMap<P>;
        contextTypes?: ValidationMap<any>;
        defaultProps?: Partial<P>;
        displayName?: string;
    }

我看了半天,才想到可以

CopyableIcon.defaultProps

index.tsx 中将上面的资源整合在一起

autoFocus={true} 导致点击"展开全部代码"滚动条会回到顶部

我在github上提了一个issue,因为这个问题足够清晰,感兴趣的小伙伴可以关注下大佬们如何解决问题,方便以后参与到开源社区的维护,Icon 图表-代码演示-点击"展开全部代码"滚动条会回到顶部

3

IconPicSearcher.tsx 就是那个搜索框
当您使用截图搜索时,会动态加载一个脚本

 loadModel = () => {
    const script = document.createElement('script');
    script.onload = async () => {
      await window.antdIconClassifier.load();
      this.setState({ modelLoaded: true });
      document.addEventListener('paste', this.onPaste);
    };
    script.src = 'https://cdn.jsdelivr.net/gh/lewis617/antd-icon-classifier@0.0/dist/main.js';
    document.head.appendChild(script);
  };

还可以看到customRequest 的用法示例

  uploadFile = (file: File) => {
    this.setState(() => ({ loading: true }));
    const reader: FileReader = new FileReader();
    reader.onload = () => {
      this.toImage(reader.result).then(this.predict);
      this.setState(() => ({
        fileList: [{ uid: 1, name: file.name, status: 'done', url: reader.result }],
      }));
    };
    reader.readAsDataURL(file);
  };

Promise 避免传递回调函数 让实现更优雅,同时也是异步获取图片的示例代码

  toImage = (url: any) => {
    return new Promise(resolve => {
      const img = new Image();
      img.setAttribute('crossOrigin', 'anonymous');
      img.src = url;
      img.onload = function onload() {
        resolve(img);
      };
    });
  };

处理黏贴行为的示例代码

  onPaste = (event: ClipboardEvent) => {
    const items = event.clipboardData && event.clipboardData.items;
    let file = null;
    if (items && items.length) {
      for (let i = 0; i < items.length; i += 1) {
        if (items[i].type.indexOf('image') !== -1) {
          file = items[i].getAsFile();
          break;
        }
      }
    }
    if (file) this.uploadFile(file);
  };

TS 扩展window

declare global {
  interface Window {
    antdIconClassifier: AntdIconClassifier;
  }
}

如何正确的使用Spin

image.png

4

"代码演示" 部分在ComponentDoc.jsx


对应文件夹

也是通过md方式呈现的
ComponentDoc.jsx 展开折叠代码

API、FAQ这些还是在index.zh-CN.md
表格

逻辑简单的直接写在md 中


我一直以为是叫antd ,知道今天才知道是叫ant,难怪之前在覆盖样式的时候第一次都不行...

在windows上跑起来antd遇到了很多困难,强烈建议使用cnpm

**如果包都安装完最后报的错先不理会,直接试一试cnpm run start能不能跑起来
这个过程还会报ess相关的错误,过程十分缓慢,甚至浏览器都提示网站无法连接...,只要脚本没退出就请耐心等待。

这些问题可能是前面一连串原因引起的,但是我根据报错信息提示的去解决,依然没用...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354