自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Dooring可視化之從零實現(xiàn)動態(tài)表單設計器

開發(fā) 前端
之前筆者有寫過一篇如何設計動態(tài)表單配置平臺的文章,但是由于筆者電腦問題代碼丟失,所以后期重新實現(xiàn)了一套表單設計器,并優(yōu)化了之前的設計方式,特地做一下總結和復盤。

[[431676]]

前言

之前筆者有寫過一篇如何設計動態(tài)表單配置平臺的文章,但是由于筆者電腦問題代碼丟失,所以后期重新實現(xiàn)了一套表單設計器,并優(yōu)化了之前的設計方式,特地做一下總結和復盤。

你將收獲

  • 動態(tài)表單開發(fā)的一般思路
  • 可視化領域中的表單引擎
  • 從零實現(xiàn)一款動態(tài)表單設計器
  • 利用H5-Dooring開發(fā)一款表單設計平臺

正文

按照習慣,我們先看看表單設計器實現(xiàn)的效果展示:

上圖中我們將表單設計器集成到了H5-Dooring中,使其可以實現(xiàn)拖拽生成表單。

其次我們可以根據(jù)右邊的配置項,動態(tài)的添加某個表單組件或或者修改組件字段和數(shù)據(jù)源。在配置好表單之后我們還可以定制表單提交的api接口地址,以便實現(xiàn)用戶數(shù)據(jù)的可溯源性。

在開發(fā)之前,我們先分析一下動態(tài)表單設計的一般實現(xiàn)思路。

動態(tài)表單開發(fā)的一般思路

1. 靜態(tài)化配置列表

靜態(tài)化配置列表是最傳統(tǒng)的表單配置方式之一,基本思路就是利用母表來生成配置項,進而實現(xiàn)表單配置。類似于以下方式:

早期的網(wǎng)站配置就是類似于這種呢方案實現(xiàn)的,比如說我們要定制網(wǎng)站的主色,網(wǎng)站某些組件是否可見,是一種比較簡單的方式。但是缺點是每增加一個配置屬性,都要開發(fā)人員重新編寫一個字段配置代碼,這種方式在表單開發(fā)中非常不靈活,而且對代碼層有強依賴性,所以只適合做小型配置系統(tǒng)。比如個人網(wǎng)站,簡單的自定義表單。

2. 基于json schema的動態(tài)表單配置

基于json schema的動態(tài)表單配置有兩種實現(xiàn)方案, 一種就是支持在線修改json文件從而實現(xiàn)定制化,另一種就是完全無代碼操作,但是前提都需要提供一套通用的表單模版。類似于如下案例:

此種方案可以實現(xiàn)基本的表單自治。也是本文主要實現(xiàn)的方案。至于在線編寫json文件的方案。筆者之前也也過成熟的方案,具體可以參考:

基于jsoneditor二次封裝一個可實時預覽的json編輯器組件(react版)

3. 支持在線coding的混合式表單設計

支持在線編程的混合式表單設計方案是終極方案,也是目前流行的無代碼化平臺的思想之一。一方面它提供了基于json schema的動態(tài)表單配置, 對于一些強定制的,需要在線設計組件方案的模式,采用在線編程,實時打包成動態(tài)組件的方式,最后根據(jù)平臺的組件約定來實現(xiàn)組件庫的方式。如下圖所示:

 

 

在線代碼編輯可以使用react-codemirror2或者 react-monaco-editor插件來實現(xiàn)。至于在線打包,我們用nodejs完全可以實現(xiàn),筆者在做Dooring項目的在線下載代碼時就用到了該方案,感興趣的可以了解一下。

可視化領域中的表單引擎

可視化領域一方面強調的是圖形(可視化)的設計,一方面是動態(tài)表單。比如說我們想傻瓜式的改變一張圖的數(shù)據(jù),屬性,交互等,我們需要通過表單這一橋梁來實現(xiàn):

 

 

所以我們需要設計一款適合公司產(chǎn)品的“表單引擎”,來動態(tài)根據(jù)圖形組件的類型渲染不同表單配置。這塊思想也是表單設計器要解決的問題之一。在下面的文章中我們會詳細介紹實現(xiàn)過程。

從零實現(xiàn)一款動態(tài)表單設計器

在實現(xiàn)表單設計器之前,我們先來整理一下思路和需求。在筆者的最初草圖中,它長這樣:

 

 

從草圖中我們可以提取到如下任務信息:

  • 定義一套表單組件庫
  • 確定表單全局屬性配置
  • 實現(xiàn)表單操作curd(增刪查改)

我們這里總結了幾個常用的表單組件如下:

  • 單選框
  • 復選框
  • 單行文本
  • 多行文本
  • 下拉框
  • 文件上傳
  • 日期框
  • 數(shù)值輸入框

以上這些基本滿足我們的日常開發(fā)需求,其次我們還可以開發(fā)數(shù)據(jù)源表單組件,列表組件,比如dooring實現(xiàn)的那樣:

 

 

類似的還有顏色面板這些,我們可以更具業(yè)務需求自行定制。

在完成表單組件庫之后,我們就需要根據(jù)配置項動態(tài)渲染了。也有兩種實現(xiàn)思路,一種就是類似于多條件判斷,如下:

  1.   item.type === 'Number' && 
  2.   <Form.Item label={item.namename={item.key}> 
  3.     <InputNumber min={1} max={item.range && item.range[1]} step={item.step} /> 
  4.   </Form.Item> 
  5.   item.type === 'Text' && 
  6.   <Form.Item label={item.namename={item.key}> 
  7.     <Input /> 
  8.   </Form.Item> 
  9.   item.type === 'TextArea' && 
  10.   <Form.Item label={item.namename={item.key}> 
  11.     <TextArea rows={4} /> 
  12.   </Form.Item> 

這樣做雖然可行,也有很多成熟系統(tǒng)采用該方案,但是一旦表單變多,比如一個頁面有幾十個甚至上百個表單項,那么我們將渲染m * n次(m為表單組件類型數(shù),n為配置項個數(shù))。另一種方式筆者看來是比較優(yōu)雅的,可以將復雜度降低到O(n),也就是筆者常用的對象法。思路大至如下:將表單組件的類型作為對象的屬性,屬性值為對應的表單組件,這樣遍歷的時候只需要對應上對象的具體類型即可。 代碼如下:

 

  1. // 維護表單控件, 提高form渲染性能 
  2. const BaseForm = { 
  3.     "Text": (props) => { 
  4.         const { label, placeholder, onChange } = props 
  5.         return <Cell title={label}> 
  6.                     <Input type="text" placeholder={placeholder} onChange={onChange} />  
  7.                </Cell> 
  8.     }, 
  9.     "Number": (props) => { 
  10.         const { label, placeholder, onChange } = props 
  11.         return <Cell title={label}> 
  12.                     <Input type="number" placeholder={placeholder} onChange={onChange} />  
  13.                </Cell> 
  14.     } 
  15.  
  16. //  動態(tài)渲染表單 
  17.     formData.map((item, i) => { 
  18.         let FormItem = BaseForm[item.type] 
  19.         return <div className={styles.formItem} key={i}> 
  20.                   <FormItem {...item} /> 
  21.               </div> 
  22.     }) 

 

 

是不是很優(yōu)雅呢?后期我們只需要在BaseForm里維護表單組件即可,而且還可以基于BaseForm對表單進行包裝,實現(xiàn)動態(tài)刪除,編輯等功能。如下:

 

 

 

 

包裝后的代碼如下:

 

 

  1. <div> 
  2.   <div className={styles.disClick}><FormItem {...item} /></div> 
  3.   <div className={styles.operationWrap}> 
  4.       <span onClick={handleEditItem}><EditOutlined /></span> 
  5.       <span onClick={handleDelItem}><MinusCircleOutlined /></span> 
  6.   </div> 
  7. </div> 

 

接下來我們看看表單的全局屬性,通過實際分析我們可以知道表單有如下外觀:

  • 表單標題
  • 表單背景圖片
  • 表單背景顏色
  • 提交按鈕樣式

所以他們因該成為表單設計的通用屬性,如下圖所示:

 

 

 

 

配置出來之后的表單可能長這樣:

 

 

 

 

以上的表單通過H5-Dooring設計而來。當然我們可以利用它設計更加自定的表單頁面。

最后一個比較使用的需求就是api定制,一般公司可能需要將用戶的錄入數(shù)據(jù)收集到自己的平臺,那么這個時候我們提供一個api表單提交接口積極很有必要了,上面筆者也展示過,實現(xiàn)很簡單,就是配置里多一個api的文本框即可。

最后一步就是實現(xiàn)表單的curd操作,展示如下:

編輯表單項:

 

 

刪除表單項:

 

 

添加表單項:

 

 

 

具體實現(xiàn)也比較簡單,只需要基于BaseForm進行包裝,添加刪除/編輯/添加按鈕即可。具體可以參考我的開源項目H5-Dooring,地址:H5-Dooring傳送門

利用H5-Dooring開發(fā)一款表單設計平臺

在H5編輯器Dooring的實現(xiàn)中,我們可以做抽象,每一個頁面組件可以看成特定的表單組件,如下圖:

 

 

 

 

我們可以利用dooring的能力對表單平臺進行拖拽,樣式設計,數(shù)據(jù)錄入等等操作,感興趣的朋友可以基于Dooring設計思路改造成自己的表單設計平臺。在文末筆者會附上dooring的github地址供大家研究參考。

H5可視化編輯器Dooring功能迭代說明

目前筆者實現(xiàn)的H5可視化編輯器H5-Dooring功能新增如下:

  • 實時保存功能
  • 添加進度條組件
  • 添加websocket通信
  • 實現(xiàn)在線下載代碼功能
  • 添加Button組件
  • 添加動態(tài)表單設計器

本文轉載自微信公眾號「趣談前端」

 

責任編輯:姜華 來源: 趣談前端
相關推薦

2021-07-12 17:23:47

零設計可視化引擎

2021-06-16 08:30:36

Dooring可視化數(shù)據(jù)源設計剖析

2021-06-16 07:05:03

安全

2023-01-07 08:09:41

零代碼Dooring組件

2021-09-27 08:31:01

數(shù)據(jù)可視化柱狀圖折現(xiàn)圖

2021-03-09 08:32:50

開發(fā)視化大屏H5-Dooring

2023-09-26 08:01:16

2022-02-28 08:34:42

開發(fā)可視化大屏

2009-08-24 14:12:46

IT運維管理表單設計工具摩卡軟件

2024-01-29 00:51:39

前端開發(fā)利器

2020-09-07 12:42:18

表單可視化開源

2024-04-17 08:50:59

開源FormikReact 表單庫

2023-08-14 23:45:55

2017-10-14 13:54:26

數(shù)據(jù)可視化數(shù)據(jù)信息可視化

2012-04-17 09:20:38

表單設計移動應用

2018-03-27 22:40:59

深度學習

2023-03-16 20:46:40

可視化平臺迭代

2024-03-11 08:32:02

2020-03-11 14:39:26

數(shù)據(jù)可視化地圖可視化地理信息

2021-06-22 14:47:19

electronDooring架構
點贊
收藏

51CTO技術棧公眾號