热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析Vue/React组件库中5个开发者鲜为人知的秘密武器

这篇文章将揭示Vue和React组件库中五个鲜为人知的强大工具。这些工具均以纯JavaScript实现,功能卓越。其中,async-validator是一个数据验证插件,不仅预置了URL和电子邮件的验证规则,还支持异步验证功能。

🚀 这五个轮子其实是5个纯js实现的插件, 都非常优秀, 下面一一给大家揭秘.

async-validator(数据验证工具)

默认集成了urlemail验证, 支持异步验证. element-ui和iview的表单组件都是用他实现的验证功能.

import schema from 'async-validator';
// 监视对象'name'字段的值是否等于muji, 且必须存在
var descriptor = {name: {type: "string",required: true,validator: (rule, value) => value === 'muji',}
};
var validator = new schema(descriptor);
validator.validate({name: "muji"}, (errors, fields) => {if(errors) {return handleErrors(errors, fields);}
});

github.com/yiminghe/as…

补充: 看了作者的github, 作者应该是阿里的员工, 而且也是ant design的代码维护者.

moment | day.js(操作时间)

ant design在DatePicker组件中用了moment.

moment由于历史兼容原因体积比较大, 现在建议大家用day.js代替他, 两者语法相似.

dayjs('2018-08-08') // 解析字符串dayjs().format('{YYYY} MM-DDTHH:mm:ss SSS [Z] A') // 格式化日期dayjs().add(1, 'year') // 当前年份增加一年dayjs().isBefore(dayjs()) // 比较

popover(气泡对话框)

element-ui和iview的tooltip和popover组件都是基于vue-popover实现的, 而vue-popover只是对popper做了一层vue的封装, 所以气泡对话框的核心是popper.

<div class&#61;"my-button">按钮div>
<div class&#61;"my-popper">气泡菜单div>

var reference &#61; document.querySelector(&#39;.my-button&#39;);
var popper &#61; document.querySelector(&#39;.my-popper&#39;);
var popperInstance &#61; new Popper(reference, popper, {// 更多设置
});

autosize(让textarea随着文字换行而变化高度)

vux的textarea用autosize让textarea组件随着输入文字换行而变化高度.

// 就一行, 就实现了"textarea随着输入文字换行而变化高度"
autosize(document.querySelector(&#39;textarea&#39;));

resize-observer-polyfill(Resize Observer API的兼容补丁)

基本所有的ui组件库都在用, 让低版本浏览器也支持Resize Observer API, 这样我们可以放心的监视元素的尺寸变化.

import ResizeObserver from &#39;resize-observer-polyfill&#39;;
const ro &#61; new ResizeObserver((entries, observer) &#61;> {for (const entry of entries) {const {left, top, width, height} &#61; entry.contentRect;console.log(&#39;Element:&#39;, entry.target);console.log(&#96;Element&#39;s size: ${ width }px x ${ height }px&#96;);console.log(&#96;Element&#39;s paddings: ${ top }px ; ${ left }px&#96;);}
});
ro.observe(document.body);

最后

学习了很多组件库的源码, 基于对写代码的热情, 我用ts写了2个小插件, 抽象了一些组件中重复的代码, 大家看下是否需要.

any-touch

&#x1f44b;一个手势库, 支持tap(点击) / press(按) / pan(拖拽) / swipe(划) / pinch(捏合) / rotate(旋转) 6大类手势, 同时支持鼠标和触屏.

在线演示

import AnyTouch from "any-touch";
const el &#61; doucument.getElementById("box");
const at &#61; new AnyTouch(el);at.on("pan", ev &#61;> {// 拖拽触发.
});

tap(点击)

用来解决移动端"click的300ms延迟问题", 同时通过设置支持"双击"事件.

press(按)

用来触发自定义菜单.

pan(拖拽)

这应该是组件库中最常用的手势, carousel(轮播) / drawer(抽屉) / scroll(滑动) / tabs(标签页)等都需要"拖拽识别"

swipe(滑)

carousel/tabs的切换下一幅, scroll的快速滑动等.

pinch(捏合) / rotate(旋转)

pinch用来缩放商品图片, rotate一般用在高级定制化功能呢, 比如对图片(商品)刻字后旋转文字.

&#x1f680; 更多说明: https://github.com/any86/any-touch

vue-create-root

&#x1f36d; 不到1kb的小工具, 把vue组件变成this.$xxx这样的命令.

// main.js
Vue.use(createRoot);// xxx.vue
import UCom from &#39;../UCom.vue&#39;;
{mounted(){// 默认组件被插入到尾部this.$createRoot(UCom, {props: {value:&#39;hello vue!&#39;}});// 或者简写为:this.$createRoot(UCom, {value:&#39;hello vue!&#39;});}
}

&#x1f680; 更多说明: https://github.com/any86/vue-create-root

微信群

感谢大家的阅读, 如有疑问可以加我微信, 我拉你进入微信群(由于腾讯对微信群的100人限制, 超过100人后必须由我拉进去)



推荐阅读
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文详细介绍了如何在Kendo UI for jQuery的数据管理组件中,将行标题字段呈现为锚点(即可点击链接),帮助开发人员更高效地实现这一功能。通过具体的代码示例和解释,即使是新手也能轻松掌握。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了如何使用Python编写爬虫程序,从豆瓣电影Top250页面抓取电影信息。文章涵盖了从基础的网页请求到处理反爬虫机制,再到多页数据抓取的全过程,并提供了完整的代码示例。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文讨论了如何根据特定条件动态显示或隐藏文件上传控件中的默认文本(如“未选择文件”)。通过结合CSS和JavaScript,可以实现更灵活的用户界面。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 使用 GitHub、JSDelivr、PicGo 和 Typora 构建高效的图床解决方案
    本文详细介绍了如何利用 GitHub 仓库、JSDelivr CDN、PicGo 图床工具和 Typora 编辑器,搭建一个高效且免费的图床系统。通过此方案,用户可以轻松管理和上传图片,并在 Markdown 文档中快速插入高质量的图片链接。 ... [详细]
  • FinOps 与 Serverless 的结合:破解云成本难题
    本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
author-avatar
耿世述_511
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有