antd源码解读(1)-index.js

news/2023/11/30 23:11:08

github: 地址
gitbook: 地址

Index.js

看一个代码的时候首先当然是从他的入口文件开始看起,所以第一份代码我们看的是/index.js文件

开始

打开index.js文件,代码只有28行,其中包含了一个camelCase函数(看函数名就知道这是个给名称进行驼峰命名法的函数),一个req变量,以及这个的变量操作和export操作

在这个文件里面我首先查了require.context()这个函数的使用,可以参考这里,以及exportsmodule.exports的区别,可以参考这里,这里是一些铺垫,下面进入正题

通过上面两个铺垫,我们知道了req这个变量是用来循环抛出组件的一个对象,并且还抛出了每一个组件的样式文件

  // index.js
  function camelCase(name) {
    return name.charAt(0).toUpperCase() +
      name.slice(1).replace(/-(\w)/g, (m, n) => {
        return n.toUpperCase();
      });
  }

  // 抛出样式 这个正则是匹配当前目录下的所有的/style/index.tsx文件
  const req = require.context('./components', true, /^\.\/[^_][\w-]+\/style\/index\.tsx?$/);

  req.keys().forEach((mod) => {
    let v = req(mod);
    if (v && v.default) {
      v = v.default;
    }
    // 抛出组件 这个正则是匹配当前目录下的素有index.tsx文件
    const match = mod.match(/^\.\/([^_][\w-]+)\/index\.tsx?$/);
    if (match && match[1]) {
      if (match[1] === 'message' || match[1] === 'notification') {
        // message & notification should not be capitalized
        exports[match[1]] = v;
      } else {
        exports[camelCase(match[1])] = v;
      }
    }
  });

  module.exports = require('./components');

但是最后不知道为甚还需要加上对吼那一句module.exports = require('./components');
既然上面都已经抛出,为什么这里还需要再次抛出,不过好像是跟什么环境和打包之后的一些操作有关,所以这里一两次抛出。这个地方还需要向大家请教。


http://www.niftyadmin.cn/n/3073146.html

相关文章

[转]Android基本组件

5 Basic Components 1. Activity 2. Service 3. Broadcast Receiver 4. Content Provider 5. Intent Activity —— 应用表示层(基类Activity) 应用程序中的每个屏幕都是通过继承和扩展基类Activity来实现的。 …

微信小程序切换

wxml<!--pages/page-qb/page-qb.wxml--> <view class"brick"><view class"my_brick">我的砖石</view><view class"quantity">{{quantity}}</view> </view><!-- 支付方式 --> <view class&qu…

【原创】试用SAE,搭建个人wordpress博客

最近试用了新浪的sinaapp&#xff0c;感觉不错。以前找的国外空间搭建自己的博客&#xff0c;不是速度不行&#xff0c;就是时常down机……无意间找到了sinaapp。于是抱着试试看的态度&#xff0c;向官方提出申请。回复速度很快&#xff0c;于是迫不及待地开始招手搭建自己的新…

通过SQL语句提取存储过程中的内容

首先&#xff0c;列出服务器上所有数据库。 --获取数据库列表 SELECTname FROMmaster.dbo.sysdatabases ORDERBYname其次&#xff0c;这是一种让所有的用户从数据库中创建存储过程。 --获取存储过程列表 --Type P --> 存储过程 --Category 0 --> 用户创建的 SELECT*FR…

微信小程序接口封装 utils/request.js

var app getApp(); //项目URL相同部分&#xff0c;减轻代码量 var host https://shengyuan-group.com.cn/; // var host http://m260048y71.zicp.vip/;/*** POST请求&#xff0c;* URL&#xff1a;接口* postData&#xff1a;参数&#xff0c;json类型* doSuccess&#xff1…

【转】在WinXP下用VC调整系统时间

前言&#xff1a; 一日&#xff0c;编程急需XP下调整系统时间的代码。最初想上网找吧&#xff0c;省事点&#xff0c;不料诺大一个internet&#xff0c;找个现成的代码居然如此困难&#xff08;按理说应该有&#xff0c;不过我确实没找到&#xff09;。只好自己写了&#xff0c…

js如何实动态删除DIV

动态删除div thenew.parentnode.removeChild(thenew) var _divdocument.getElementById(div_id);_div.parentNode.removeChild(_div); document.getElementById(div_id).style.display; 获取 input 值 var titledocument.getElementById("title").value; var linkid …

Cobbler自动化批量安装linux服务器的操作记录

Cobbler为何物&#xff1f; Cobbler是一个快速网络安装linux的服务&#xff0c;而且在经过调整也可以支持网络安装windows。该工具使用python开发&#xff0c;小巧轻便(才15k行python代码)&#xff0c;使用简单的命令即可完成PXE网络安装环境的配置&#xff0c;同时还可以管理D…

小程序接口调用示例

// pages/activityDetail/activityDetail.js //获取应用实例 const app getApp()var call require("../../utils/request.js")Page({/*** 页面的初始数据*/data: {gl_imgSrc: app.globalData.imgSrc,// gl_imgUrl: app. lobalData.imgUrl,wxParseData: ,activityId…

百度面试题:找出数组中出现次数超过一半的数

现在有一个数组&#xff0c;已知一个数出现的次数超过了一半&#xff0c;请用O(n)的复杂度的算法找出这个数。 Thinking…… Thinking……Thinking……Thinking……Thinking……Thinking……Thinking……答案&#xff1a; 创建一个hash_map&#xff0c;key为数组中的数&#x…

使用VBS脚本从文件服务器拷贝文件到sharepoint文档库

接到一个任务&#xff0c;需要将文件服务器上的一部分文件定期拷贝到sharepoint文档库中&#xff0c;很简单的一个VBS脚本 Const OverwriteExisting True Set objFSO CreateObject("Scripting.FileSystemObject") objFSO.CopyFile "\\server1\Department\IT\S…

php面向对象(设计模式 工厂模式)

//设计模式//单例模式//类的计划生育//让该类在外界无法造成对象//让外界可以造一个对象&#xff0c;做一个静态方法返回对象//在累里面可以通过静态变量控制返回对象只能有一个//class Cat//{// public $name;// private function __construct()// {// }// stat…

【原创】VS2005调用matlab R2010b生成的DLL

配置环境&#xff1a; Windows XP、VS2005、Matlab R2010b安装过程&#xff1a;为了自己的论文&#xff0c;今天开始研究Matlab与C/C混合编程。1&#xff0c;安装matlab编译器首先&#xff0c;利用百度查找相关知识&#xff0c;发现一篇文章写的不错&#xff0c;“VS2008 C 调用…

链表使用中隐藏的杀机(1)

以as3为例 链表是很有用且方便的数据结构&#xff0c;能方便的解决很多问题。 对于游戏开发来讲&#xff0c;很有用途。 例如游戏中的子弹(及其附加的效果)在游戏运行过程中会大量产生&#xff0c;如果用数组来存储这些子弹&#xff0c;那么每一帧中需要遍历的数组长度中包含着…

npm使用方法和命令

npm config list/ls 显示配置信息 npm config list/ls -l 更详细 npm -h 显示帮助信息&#xff0c;建议多查看 npm -l display full usage info ;-l is --long npm <cmd> -h 显示某个命令的帮助信息 npm help npm npm help <term>npm config set prefix path 修改n…

lucene 快速入门

日常开发中&#xff0c;相信大家经常会用like去匹配一些数据&#xff0c;同时我们也知道&#xff0c;like往往会导致全表扫描&#xff0c;当数据量越来越大的时候&#xff0c;我们会纠结于 数据库的龟速查找&#xff0c;此时我们必须另寻蹊跷&#xff0c;这时lucene就可以大显身…
最新文章