@alitajs/dform 移动端表单库 3.0 强势来袭

简介: @alitajs/dform 移动端表单库 3.0 强势来袭

一、回顾 2.0


前言

为了解决从事移动端 h5 开发的小伙伴被长表单支配的恐惧,我们在 2020 年年初推出了 dform 的第一个版本。

经过一年多的时间的沉淀,在公司内部数十个项目中得到锤炼,不断的完善优化。升级了稳定的 2.0 版本。


基础功能介绍

我们借鉴 antd@4Form 组件,对底层表单库进行二次封装。

补充了 radio 单选checkbox 多选rangeDatePicker 时间区间选择器antd-mobile 库里没有的组件样式。

实现一行代码实现单页面表单的取值赋值操作。

做到一行配置代码统一修改整个项目的表单样式,在多人协同开发项目的情况下保证表单样式的统一。

可视化 isDev 开发者模式方案。@alitajs/dform 可视化开发者模式

方案涵盖:

  • UI 的快速实现
  • 能实现一次性全部赋值
  • 表单一次性提交取值
  • 融合多类型组件表单
  • 支持动态表单
  • 一行代码配置项目表单样式



二、强大的新功能

经过数十个项目的积累,我们收集到了来自小伙伴们的新需求。至此 dform3 的新功能设想慢慢变得清晰:

image.png


1、表单提交报错时的错误提示

我们将 antd-mobileList 组件从 dform 中抽离出来,提高了表单样式的灵活性。

并在每次执行 submit() 的提交表单数据方法时获取错误信息,展示在页面上。

image.png


2、级联

开发过复杂表单的小伙伴一定有过级联的需求,对于字段固定的表单,可以通过自定义某个组件的 onChange 方法,自行触发其他组件的配置。

如果是动态表单,就比较让人头疼。


对此,我们给 dform 增加了 relatives 属性。用于配置整个表单的全部级联关系。

四种级联规则包括:

  • 修改表单任意组件的值
  • 调整表单任意组件是否为必填项
  • 调整表单任意组件是否隐藏
  • 调整表单任意组件是否不可编辑


有了可配置的级联规则,我们就可以从 onChange 的方法中解放出来。提高复杂表单的开发逻辑效率。

const relatives = {
  sex: [
    {
      type: "changeFormValue", // 修改值
      targetValue: ["woman"], // 当 sex 组件选中 `woman`
      targetSet: [
        {
          targetField: "username", // `username` 这个组件值修改为 `莉丝`
          targetValue: "莉丝",
        },
      ],
    },
    {
      type: "required", // 是否必填
      targetValue: ["woman"], // 当 sex 组件选中 `woman`
      targetSet: [
        {
          targetField: "date", // date 组件为必填
        },
      ],
    },
    ...
  ],
  ...
};

来看下效果图:

1.gif


3、分组

很多表单并不会以长表单的方式,直接展示在界面上,而是根据模块划分,比如个人信息、家庭信息、业务信息等。

表单存放在各个模块中,小伙伴们没必要在一个页面上定义多个表单,但是分块后又难以实现样式和单个表单的统一处理。

对此我们使用 const { Group } = DynamicForm 导出分组的组件。助力小伙伴自动实现卡片样式。

image.png


代码的实现方式更是方便,还能支持多层卡片嵌套:

<DynamicForm {...formProps}>
  <Group type="card" title="卡片一" required>
    <DformInput
      fieldProps="username"
      required
      placeholder="请输入"
      title="用户名"
      defaultValue="小红"
    />
    <Group type="card" title="卡片二" required>
      <DformRadio fieldProps="sex" title="性别" required data={sexData} />
    </Group>
  </Group>
  ...
</DynamicForm>


如果是以 json 的形式实现 dform 我们也提供多层卡片嵌套的能力:

const data = [
  {
    type: "group",
    fieldProps: "group1",
    groupProps: {
      type: "card",
      title: "卡片一",
      required: true,
    },
    children: [
      {
        type: "input",
        fieldProps: "username",
        required: true,
        placeholder: "请输入",
        title: "用户名",
        defaultValue: "小红",
      },
      {
        type: "group",
        fieldProps: "group2",
        groupProps: {
          type: "card",
          title: "卡片二",
          required: true,
        },
        children: [
          {
            type: "radio",
            fieldProps: "sex",
            title: "性别",
            data: sexData,
            required: true,
          },
        ],
      },
    ],
  },
  ...
];


4、推广组件化方式开发

2.0 的版本中,我们主要推广 json 的方式类似实现动态表单,但是在实际的业务开发中,我们能够发现,很多场景下会在表单内增加很多自定义的样式。

所以表单并不一定是一行行顺序展示下来,很可能中间会嵌入自定义的样式,这里如果还是用 json 的开发形式,就带来了极大的不便利。

所以我们强烈建议从 @alitajs/dform 里导出各个组件来实现业务。

组件化开发和 json 开发的代码量和 api 都保持一致。


5、单个组件默认赋值

除了在 formsValues 赋值,还在每个组件下增加了 defaultValue 的默认值。

formsValues 的赋值权限大于 defaultValue。及如果两处都有赋值的情况下,将优先使用 formsValues 的值。



集训营 第 001 期

参与人员

  • 陈小聪
  • 薛诗东雨
  • 陈书航
  • 林君源

  • 171 次提交
  • 9,598 行代码
  • 10 个工作日的深夜

本次 dform@3 作为集训营第一期的内容,通过小伙伴们的共同努力,在最短的时间完成预定的所有需求,在此特别鸣谢他们对本次任务顺利完成的付出。



结束语

v3.0 的版本并不是结束,dform 的表单之路还在延续,欢迎小伙伴们能够提供更好的想法。

欢迎给我们提供 pr 或者 issues

官网文档:https://dform.alitajs.com/


目录
相关文章
|
8天前
|
前端开发 JavaScript 开发者
超实用开源前端商城模板,助力电商项目飞速启航!免费直接可用!
分享一款精心设计的开源前端商城模板,涵盖商品展示、购物车、订单处理、用户登录注册等核心功能,使用HTML、CSS、JS和jQuery构建,结构清晰,适合新手和资深开发者,助力电商项目快速启动。
33 0
超实用开源前端商城模板,助力电商项目飞速启航!免费直接可用!
|
13天前
|
移动开发 前端开发 JavaScript
惊!这些前端技术竟然能让你的网站在移动端大放异彩!
随着互联网技术的发展,移动设备成为主要的上网工具。本文介绍了几种关键的前端技术,包括响应式设计、图片优化、字体选择、HTML5和CSS3的应用、性能优化及手势操作设计,帮助开发者提升网站在移动端的显示效果和用户体验。示例代码展示了如何实现简单的双向绑定功能。
23 3
|
3月前
|
前端开发 Java UED
瞬间变身高手!JSF 与 Ajax 强强联手,打造极致用户体验的富客户端应用,让你的应用焕然一新!
【8月更文挑战第31天】JavaServer Faces (JSF) 是 Java EE 标准的一部分,常用于构建企业级 Web 应用。传统 JSF 应用采用全页面刷新方式,可能影响用户体验。通过集成 Ajax 技术,可以显著提升应用的响应速度和交互性。本文详细介绍如何在 JSF 应用中使用 Ajax 构建富客户端应用,并通过具体示例展示 Ajax 在 JSF 中的应用。首先,确保安装 JDK 和支持 Java EE 的应用服务器(如 Apache Tomcat 或 WildFly)。
44 0
|
5月前
|
小程序 前端开发 JavaScript
微信小程序|经济新闻资讯的设计与实现
微信小程序|经济新闻资讯的设计与实现
仿网易官网顶部展出的大幅广告代码,附效果演示
仿网易官网顶部展出的大幅广告代码,附效果演示
|
6月前
|
移动开发 负载均衡 小程序
代驾app开发丨代驾系统开发玩法详情丨代驾系统开发网页版/H5/小程序及源码部署
**司机/代驾员端**:司机可以通过APP接收订单,查看订单详情、路线和导航,提供现场服务并进行确认。
|
存储 缓存 安全
移动端的「基金地图」是怎么做的?
移动端的「基金地图」是怎么做的?
118 0
|
小程序 数据库 Android开发
微信小程序云开发校园社交二手物品跳蚤平台表白动态求助寻物组队
微信小程序云开发校园社交二手物品跳蚤平台表白动态求助寻物组队
213 1
微信小程序云开发校园社交二手物品跳蚤平台表白动态求助寻物组队
|
前端开发
医药协会网站-前端网页技术设计HTML+CSS精美完整网页网站源码
医药协会网站-前端网页技术设计HTML+CSS精美完整网页网站源码
153 0
医药协会网站-前端网页技术设计HTML+CSS精美完整网页网站源码
下一篇
无影云桌面