技术分享【大安全开发部前端技术团队】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,并且有什么自己的使用想法欢迎一起讨论~

相关文章
|
5天前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
|
1月前
|
前端开发 JavaScript API
(前端3D模型开发)网页三维CAD中加载和保存STEP模型
本文介绍了如何使用`mxcad3d`库在网页上实现STEP格式三维模型的导入与导出。首先,通过官方教程搭建基本项目环境,了解核心对象如MxCAD3DObject、Mx3dDbDocument等的使用方法。接着,编写了加载和保存STEP模型的具体代码,包括HTML界面设计和TypeScript逻辑实现。最后,通过运行项目验证功能,展示了从模型加载到保存的全过程。此外,`mxcad3d`还支持多种其他格式的三维模型文件操作。
|
1天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
5天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
6天前
|
Dart 前端开发 架构师
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
|
1天前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
26 10
|
22天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
178 18
|
29天前
|
开发框架 前端开发 JavaScript
uniapp开发鸿蒙,是前端新出路吗?
相信不少前端从业者一听uniapp支持开发鸿蒙Next后非常振奋。猫林老师作为7年前端er也是非常激动,第一时间体验了下。在这里也给大家分享一下我的看法
78 17
|
1月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
100 3
|
1月前
|
前端开发 搜索推荐 安全
陪玩系统架构设计陪玩系统前后端开发,陪玩前端设计是如何让人眼前一亮的?
陪玩系统的架构设计、前后端开发及前端设计是构建吸引用户、功能完善的平台关键。架构需考虑用户需求、技术选型、安全性等,确保稳定性和扩展性。前端可选用React、Vue或Uniapp,后端用Spring Boot或Django,数据库结合MySQL和MongoDB。功能涵盖用户管理、陪玩者管理、订单处理、智能匹配与通讯。安全性方面采用SSL加密和定期漏洞扫描。前端设计注重美观、易用及个性化推荐,提升用户体验和平台粘性。
65 0

热门文章

最新文章