【张科公式源码】【android popupwindow 源码】【web象棋源码】antd 源码

1.一看就会的超实用小组件之LoadingButton
2.Antd源码浅析之Icon组件
3.读读antd源码之通用组件
4.antd的源码config-overrides.js组合配置问题
5.antd 中 Form 表单的使用

antd 源码

一看就会的超实用小组件之LoadingButton

       ç»„件背景

       åœ¨å¹³æ—¶çš„工作中,经常会遇到一个场景:

       ç‚¹å‡»æŒ‰é’®æ—¶è¯·æ±‚一些接口数据,而为了避免用户重复的点击我们通常会为这些按钮添加loading。这个添加loading的功能本身时非常简单的,只要我们定义一个变量使用在Button组件中即可,但在做后台管理类项目时,这样的按钮可能会有非常非常多,可能一个组件中,很多变量都是xxx_loading,耗时耗力又不够优雅。接下来,我们对Button组件做一个简单的封装来解决这个耗时耗力又不够优雅的loading问题

灵感来源

       æˆ‘们在使用Antd的Modal对话框时,当我们的onOk为异步函数时,此时Modal的确定按钮会自动添加loading效果,在函数执行完成后关闭弹窗,就像这样:此时,代码如下:

asyncFunc(){ returnnewPromise(resolve=>{ setTimeout(()=>{ resolve()},)})},handleTestModal(){ constthat=thisthis.$confirm({ title:'测试异步函数',content:'异步函数延迟两秒结束',asynconOk(){ awaitthat.asyncFunc()}})},

       çœ‹åˆ°è¿™ç§æ•ˆæžœåŽï¼Œå°±æƒ³åˆ°ï¼Œå¦‚果可以封装一个Button组件,将需要执行的函数传入,组件中自动根据函数执行情况添加loading效果岂不是非常的方便。

实现LoadingButton定义组件参数

       è¿™è¾¹å°±å®šä¹‰å‡ ä¸ªå¤§å®¶ä¼šå¸¸ç”¨åˆ°çš„参数:text(按钮文字)、type(按钮类型)、asyncFunc(按钮点击时执行的异步函数)、delay(loading延迟),另外,还需要一个组件内部的loading变量来控制我们Button组件的状态,代码如下:

exportdefault{ data(){ return{ loading:false}},props:{ text:{ type:String,default:'确定'},type:{ type:String,default:'primary'},delay:{ type:Number,default:0},asyncFunc:{ type:Function,default:()=>{ }}},}使用antd中的Button组件进行二次封装

       åœ¨æˆ‘们的自定义LoadingButton组件中,将上面定义的参数使用起来,并绑定一个click事件,代码如下:

<template><Button:type="type":loading="loading"@click="handleClick">{ { text}}</Button></template><script>import{ Button}from'ant-design-vue'exportdefault{ components:{ Button},methods:{ handleClick(){ }}}</script>判断异步函数asyncFunc

       è¿™ä¸€éƒ¨åˆ†ä¸ºæ•´ä¸ªç»„件最重要的一个部分,即我们如何去判断传入的函数是异步函数,当我们传入的asyncFunc函数是异步函数时,组件才需要添加loading的动画,那么我们应该如何去判断一个函数是否为异步函数呢?

参考antd是如何实现的?

       ä¸Šé¢æˆ‘们刚介绍了antd的Modal对话框中有类似的逻辑,那么不妨去阅读一下这部分相关的源码,看下antd的实现方式:

//components/modal/ActionButton.jsxonClick(){ const{ actionFn,closeModal}=this;if(actionFn){ letret;if(actionFn.length){ ret=actionFn(closeModal);}else{ ret=actionFn();if(!ret){ closeModal();}}if(ret&&ret.then){ this.setState({ loading:true});ret.then((...args)=>{ //It'sunnecessarytosetloading=false,fortheModalwillbeunmountedafterclose.//this.setState({ loading:false});closeModal(...args);},e=>{ //Emiterrorwhencatchpromisereject//eslint-disable-next-lineno-consoleconsole.error(e);//See:/post/

Antd源码浅析之Icon组件

       在进行B端项目开发时,我使用了Ant Design,源码其简洁优雅的源码设计深受喜爱。为了更好地理解其内部机制,源码我打算浅析Ant Design的源码Icon组件,尽管技术基础有限,源码张科公式源码但仍希望能有所收获。源码本文主要针对Ant Design 3.4.4 的源码源码进行分析,前提是源码你对JavaScript、React有一定了解。源码Antd定位为企业级产品的源码设计体系,适用于构建后台页面,源码比如CMS系统,源码它在React的源码世界里,就像Bootstrap与jQuery的源码对应关系,Vue也有Element UI这样的伴侣。

       Antd源码基于TypeScript,一种JavaScript的类型超集,由微软开发,android popupwindow 源码用于进行静态类型检查,比如Vue使用Flow。JavaScript虽为弱类型,但大型库如Antd选择严谨,采用TypeScript或Flow。

       打开Antd的源码目录,组件结构清晰,Icon组件位于components文件夹内。组件文档详细,包括英文说明,可在官网查看。接下来,我们将深入核心代码,index.tsx是关键文件,它使用了Typescript的jsx语法,最终编译为.js文件。

       在index.tsx中,可以看到Icon组件的web象棋源码定义,包括参数如spin(旋转动画)、style(样式)和type(图标类型)。官网还提供了示例和API描述,如spin参数默认为false,style为对象,type为字符串。

       代码中,Antd引入了classnames处理动态CSS,omit.js则用于过滤不需要传递的属性。IconProps是参数校验器,确保接收数据有效,Antd采用TypeScript替代React的PropTypes进行类型检查。

       主体代码中,Antd使用了标签实现Icon,首先通过IconProps验证参数,然后根据传入的type动态生成CSS类名。最后,通过omit函数过滤掉type和spin,2019拜年源码因为它们在HTML标签中无意义。通过一个实例,我们可以看到生成的HTML代码。

       总结来说,Antd的Icon组件实现原理清晰,虽然涉及TypeScript的使用可能对部分读者来说是个新概念,但其实质是数据类型校验。通过这个过程,我们可以学习到如何利用TypeScript来增强代码的类型安全性和可维护性。

读读antd源码之通用组件

       ui组件库在ui开发框架中扮演着类似模具的角色,极大地提升了生产效率。无论是设计风格、基础功能还是操作交互,ui组件库都进行了高度统一,为项目开发提供了开箱即用的便捷。在React领域,中后台项目常用到的ui组件库,非Ant Design(antd)莫属。抄源码兼职

       本文将分享antd组件库的源码,探讨我们习以为常的功能背后的逻辑处理。在阅读过程中,将遵循《阅读前端源码的思路》,文章将直接分享重点,忽略具体细节。

       一个没有设计理念的ui组件库,都不好意思称作ui组件库。官方文档中,第一个栏目就是“设计”,可见设计是ui组件库的灵魂,它包含了自身的价值观和模式,并遵循一系列规范。本文将先分享阅读的第1个,通用组件的源码。

       通用组件包含三个:Button、Icon、Typography。关于这些组件,我们可以从官方文档中看到一些值得思考的功能。例如,Button的点击动作反馈,Icon的内部图标封装,Typography的文本处理或功能封装等。

       antd的组件源码相对混乱,但我们可以从中找到一些有趣的点。例如,Button组件中关于按钮文字是两个汉字时插入空格的逻辑,以及内容劫持的过程。Wave组件的实现主要涉及到transition和animation,其中onClick方法的关键在于updateCSS方法,它动态添加样式,并添加transition和animation。

       Icon组件则被搬到了@ant-design/icons库中实现,主要是一些样式、事件和图标引用的处理。Typography组件则提供了一系列文本样式的内容,其中文本拷贝使用了copy-to-clipboard库,文本溢出处理则通过Ellipsis组件实现。

       本文对antd源码之通用组件的探讨就到这里,希望能帮助你更好地理解这些组件的内部逻辑。

antd的config-overrides.js组合配置问题

       在进行React项目开发时,我遇到了一个关于Ant Design配置的问题。项目中原本的icon元素在引入Ant Design后出现了空白现象,这让我感到疑惑。经过一番排查,我发现这是在引入Ant Design的`config-overrides.js`文件后,导致了原本的icon配置被覆盖。

       在未引入Ant Design时,项目的配置文件是这样的:

       引入Ant Design后,配置文件出现了变化,这可能是`config-overrides.js`文件中对某些配置进行了调整,导致原本的icon配置失效。

       了解到`config-overrides.js`文件会覆盖原有的webpack配置后,我开始思考如何解决这个问题。经过多次尝试,我找到了一个解决方案——将原本额外配置的webpack.config.js内容整合到`config-overrides.js`中。

       为了实现这一目标,我将原本的webpack配置记录整理,并将其内容整合进`config-overrides.js`中,以确保不会被覆盖。以下是我整合后的配置源码:

       (具体整合后的配置源码)

       通过将额外配置的webpack.config.js内容写入`config-overrides.js`中,问题得以解决,最终实现了组合配置成功的目标。

antd 中 Form 表单的使用

       本文主要介绍在使用 Ant Design (antd) 中的 Form 表单组件时的常见问题以及对源码的研究分析。

       在创建 Form 组件时,会通过 `useForm` 钩子生成对应的 FormStore 类对象,并返回一个 FormInstance 对象。FormStore 的 store 对象则作为表单数据的唯一数据源,包含所有已命名表单组件的值。

       使用 `useForm` 获得的 FormInstance 对象能够与表单组件内的 Input 组件互动。当输入框内容发生变化时,通过 `form.getFieldsValue(true)` 或 `onFinish` 事件,可以获取输入的 id 或 name 值。实现机制上,antd 选择在创建表单元素时定义并传入 `value` 和 `onChange` 属性,这样在组件值发生变化时,可以同步更新 store。

       当遇到特定问题,如如何获取表单值、如何传递 FormInstance 对象给子组件、如何监听表单值的变化等,可以利用 antd 提供的 `Form.useFormInstance` 方法简化传值,`Form.useWatch` 方法获取表单值并触发组件刷新。监听表单值变化时,需注意区分与获取表单值的差别,避免复杂的逻辑编写。

       在使用 Form.Item 时,有时会遇到其不支持传入数组子组件的问题,这是因为 Form.Item 会重置子组件的属性,包括 `value` 和 `onChange`。为解决此需求,可以将子组件数组封装成一个单个组件,并代理其属性,使 Form.Item 看似一个具有 `value` 和 `onChange` 的表单组件。

       以上内容是通过分析 antd 中 Form 表单组件的源码,以及在实际开发中遇到的问题,总结出的关键点与解决方案。通过了解这些细节,可以更有效地使用 Form 表单组件,避免常见错误,提高开发效率。

更多内容请点击【百科】专栏

精彩资讯