技术分享【大安全开发部前端技术团队】formily是个什么东东?-使用感受

简介: 阿里平台formily框架的使用初级感受

从formily v1的版本使用到formily v2正式版本的使用与开发,有了一点心得体会,分享给大家:

首先来了解下formily是什么:

基于本人的理解,它主要是用于表单场景的使用,antd大家都很清楚,就不多说,formily是一个在antd的基础上二次封装,不需要再写繁重的表单逻辑,直接可通过json格式配置的一个新的ui框架

按照使用antd或element等ui框架的使用习惯,我们通常会这样来定义一个表单:

image.png

(图片来自于antd官网)

但基于使用formily的习惯,我们定义一个表单,通过用json的格式配置出一个页面,传入相应的组件名以及使用方法等
image.png
(样例本地获取)

将写好的json传入fomily暴露出来的相应方法:
image.png
样例本地获取)

以下为展示效果,基本于antd中form的表单展示效果一样
image.png
(图片来自于本地)

基于官网:它能实现的功能有很多,解决很多问题,例如:1.字段数量多,如何让性能不随字段数量增加而变差?2.字段关联逻辑复杂,如何更简单的实现复杂的联动逻辑?字段与字段关联时,如何保证不影响表单性能?3.表单数据管理复杂 4.表单状态管理复杂 5.表单的场景化复用 6.动态渲染述求很强烈 7.如何在表单协议中描述逻辑?等问题。它是阿里数字供应链团队,在经历了大量的中后台实践和探索之后,沉淀出 Formily 表单解决方案

领域模型:

首先表单联动是非常复杂的,基本上都是基于某些字段的值引发的联动,但是,实际业务需求可能会比较恶心,不仅要基于某些字段值引发联动,还会基于其他副作用值引发联动,用张图片表示:image.png(图片来自官网)
image.png

(field基本模型,图片来自官网)

协议驱动:

为了不污染标准 JSON-Schema 属性,统一以x-*格式来表达扩展属性,通俗来说,我们使用antd的组件的时候,我们希望使用他的属性,我们可以直接按照antd的文档属性直接使用,另外formily现有的控件或者antd现有的控件还不能满足我们的使用要求的时候,我们可以自行封装组件,然后注册进去(怎么自行封装组件以及注册,下次再说),相关属性也可通过"x-component-props"属性去传入

这样看来,UI 协议与数据协议混合在一起,只要有一个统一的扩展约定,也还是能保证两种协议职责单一。
image.png
(图片来自官网)

 

然后,如果想要在某些字段上包裹一个 UI 容器怎么办呢?这里,Formily 定义了一个新的 schema type,叫void,在 JSON Schema 中,引入 void,代表一个虚数据节点,表示该节点并不占用实际数据结构
image.png

(图片来自官网)

 

 

那么讲到字段联动:

{

 "type": "object",

 "properties": {

   "source": {

     "type": "string",

     "title": "Source",

     "x-component": "Input",

     "x-component-props": {

       "placeholder": "请输入"

     }

   },

"target": {

     "type": "string",

     "title": "Target",

     "x-component": "Input",

     "x-component-props": {

       "placeholder": "请输入"

     },

     "x-reactions": [

       {

         "dependencies": ["source"],

         "when": "{{$deps[0] == '123'}}",

         "fulfill": {

           "state": {

             "visible": true

           }

         },

         "otherwise": {

           "state": {

             "visible": false

           }

         }

}

     ]

   }

 }

}

可以在x-reactions中进行相关操作,借助x-reactions描述了 target 字段,依赖了 source 字段的值,如果值为'123'的时候则显示 target 字段,否则隐藏,这种联动方式是一种被动联动,那如果我们希望实现主动联动呢?可以这样:

{

 "type": "object",

 "properties": {

   "source": {

     "type": "string",

     "title": "Source",

     "x-component": "Input",

     "x-component-props": {

       "placeholder": "请输入"

     },

     "x-reactions": [

       {

         "when": "{{$self.value == '123'}}",

         "target": "target",

         "fulfill": {

           "state": {

             "visible": true

           }

         },

         "otherwise": {
             
"state": {

             "visible": false

           }

         }

       }

     ]

   },

   "target": {

     "type": "string",

     "title": "Target",

     "x-component": "Input",

     "x-component-props": {

       "placeholder": "请输入"

     }

   }

 }

}
所以,以上表单完全可以使用协议来描述了,不管是再复杂的布局,还是很复杂的联动,都能做到可配置

 

核心优势:高性能,开箱即用,联动逻辑实现高效,跨端能力,逻辑可跨框架,跨终端复用,动态渲染能力

核心劣势: 学习成本较高,虽然 2.x 已经在大量收敛概念,但还是存在一定的学习成本。

相关使用:
image.png
具体使用请上官网细看https://v2.formilyjs.org/zh-CN/guide

欢迎大家学习formily,并且有什么自己的使用想法欢迎一起讨论~

相关文章
|
12天前
|
前端开发 JavaScript 测试技术
前端测试技术中,如何提高集成测试的效率?
前端测试技术中,如何提高集成测试的效率?
|
5天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
13 5
|
12天前
|
前端开发 JavaScript UED
不可思议!前端小白如何靠这些技巧逆袭,成为团队中的闪耀之星?
前端开发对初学者来说充满挑战,但通过正确的方法和技巧,你可以从新手蜕变为高手。本文分享前端小白逆袭的秘诀,包括夯实HTML、CSS与JavaScript基础,掌握前端框架与库,提升性能优化技巧,以及持续学习与分享。示例代码展示了简单的HTML+CSS+JavaScript页面和Vue组件,帮助你逐步进阶。
19 4
|
12天前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
21 3
|
12天前
|
数据采集 前端开发 安全
前端测试技术
前端测试是确保前端应用程序质量和性能的重要环节,涵盖了多种技术和方法
|
17天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
27 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
1月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
136 2
|
1月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
43 0
|
1月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
1月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。

热门文章

最新文章

下一篇
无影云桌面