前端組件開發:組件開發 / 定義配置 / 配置驅動開發 / 爬蟲配置 / 組件V2.0 / form表單 / table表單

一、最早的靈感

最早的靈感來自sprider / 網絡爬蟲 / 爬蟲配置,在爬蟲爬取網站文章時候,會輸入給爬蟲一個配置文件,里邊的內容是一個json對象。里邊包含了所有想要抓取的頁面的信息。爬蟲通過這個配置就可以抓取目標網站的數據。其實本文要引出的配置就類似爬蟲的配置,一模一樣。只是我們把配置輸入給了前端的組件,數據從接口直接獲取。本質上是一模一樣的。相比較爬蟲配置我們會定義的更加細致而已,以滿足需求。

爬蟲配置

{"url": "https://example.com",  // 目標網頁的URL"headers": {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"},title: 'js代碼獲取title', // 這里就類似本文的組件content: 'js代碼獲取content', // 這里就類似本文的組件......"timeout": 10,  // 請求超時時間(秒)"max_retries": 3  // 最大重試次數
}

爬蟲通過配置爬取到數據后,會把數據輸入到模板頁面,模板頁面會承載所有的數據,前端會以富文本的形式得到模板頁面,在頁面展示出來。
或者以接口的形式給到前端也是同理的。

這里的重點是一個配置文件,驅動爬蟲抓取了目標頁面的所有信息。
我們的配置從某種意義上和爬蟲配置是一樣的。

本文的重點是類似爬蟲配置一樣,給前端組件輸入一個配置從而形成一個基礎的頁面。

二、配置工程師的玩笑

有一個玩笑的話,前端開發工程師是配置工程師。我作為前端開發工程師可以這么玩笑的說,別人不能對我這么說,因為我們定義配置是對業務和技術的升華形成了配置。別人對我這么說我認為你只看到了前端努力后簡潔明快的結果,沒有看到努力的過程,我會不高興,剛過元旦,我只能祝你元旦快樂,洗洗睡吧。

三、理解配置驅動開發

很長時間在團隊里強調,業務開發與組件開發分離。為什么?因為業務開發往往比較緊急,往往在代碼邏輯上不夠細致,在UI上也不夠完美,規范性難以保證,多方人員的情緒接踵而來。所以我強調業務開發與組件分離。

我這么強調和引導,并不是想要開發組件成為少數人所謂在團隊中的專利和壁壘,我在倡導業務開發與組件開發分離的同時我積極引導團隊每一個成員開發組件,給予機會,并引導幫助迭代。

那么組件化之后會帶來哪些變化,為什么組件化是前端工程化的重要組成,簡單講就是,“輸入配置,輸出結果”。大大提升了生產力。甚至一套配置驅動多端(pc端/小程序端/等,再有其他端也是同理),這里就引出的本文的主題“配置”。

隨著我團隊組件化的豐富,基本做到了配置驅動開發。由業務和技術我們定義配置,由配置驅動開發。采用這種方式后,團隊成員開發效率和積極性有明顯提高。技術水平在開發組件過程中也得到提升。在定義配置的過程中/伴隨對業務的研究-業務水平也得到提升。

我一直相信要有開放包容的心態,積極努力的過程中帶動一幫人,這樣的努力更有意義,獨學而無友,則孤陋而寡聞,這也是我博客的初衷。

四、配置驅動開發的前提

組件化、模塊化,以此產生了配置,以配置的規范性/統一性來驅動多端

五、展示表單頁面

如圖展示的內容均可輕易通過配置的方式輕松實現

六、定義配置

// 字段命名要顯性命名,不能產生歧義
// 每一個對象是一個模塊
// 再有更多的模塊類型也是同理,再有更多的表單類型也是同理
// 涉及到從接口獲取數據的/比如select-remote,輸入接口即可,若輸入數據,那么配置小的變化就需要全量的處理
// 本文第五條展示的內容,按照合理的配置都可以輸出頁面骨架
export const config = {id: 'contract',title: 'contract',type: 'add', // add 新增 / edit 編輯 / details 詳情 / delete 刪除 / approval 審批list: [{id: '',type: 'buttons',title: '',list: [{type: 'add',id: '1',name: '新增',code: '001',event: () => {},disabled:false,more: {}},{type: 'edit',id: '2',name: '編輯',code: '002',event: () => {},disabled:false,more: {}},{type: 'details',id: '3',name: '詳情',code: '003',event: () => {},disabled:false,more: {}},// ...],more: {}},{id: '',type: 'form',title: '',list: [ // form配置項{type: 'title'label: "title",},{type: 'input'label: "姓名",fieldName: '',fieldValue: '', // 可能沒有disabled:false,},{type: "select",label: "收貨地址",fieldName: "",fieldValue: '',required: true,disabled:false,attrs: {placeholder: "請選擇收貨地址",disabled:false,options: [{label:'北京', value: 1},{label:'上海', value: 2},],},more: {}},{type: "select-remote",label: "負責人",fieldName: "personInChargeName",fieldValue: "personInChargeId",required: true,url: '/m-a-center/api/v1/a/pageList',method: 'get',res: ['res', 'payload', 'content'],map: [{key: 'label',target: 'userName',},{key: 'value',target: 'id',},],params: {query: 'keyword',default:{companyId: uni.getStorageSync('company-id'),page: 1,pageSize: 20,},},attrs: {placeholder: "請選擇負責人",disabled:false,options: [],},more: {}},// ...],values: {}, // 數據event: () => {},more: {}},{id: '',type: 'table',title: '',list: [[ // table配置項{type: 'title'label: "title",},{type: 'input'label: "姓名",fieldName: '',fieldValue: '', // 可能沒有disabled:false,},{type: "select",label: "收貨地址",fieldName: "",fieldValue: '',required: true,disabled:false,attrs: {placeholder: "請選擇收貨地址",disabled:false,options: [{label:'北京', value: 1},{label:'上海', value: 2},],},more: {}},{type: "select-remote",label: "負責人",fieldName: "personInChargeName",fieldValue: "personInChargeId",required: true,url: '/m-a-center/api/v1/a/pageList',method: 'get',res: ['res', 'payload', 'content'],map: [{key: 'label',target: 'userName',},{key: 'value',target: 'id',},],params: {query: 'keyword',default:{companyId: uni.getStorageSync('company-id'),page: 1,pageSize: 20,},},attrs: {placeholder: "請選擇負責人",disabled:false,options: [],},more: {}},// ...]],values: [{}, {}], // table 數據buttons: [{type: 'add',id: '1',name: '新增',code: '001',event: () => {},more: {}},{type: 'edit',id: '2',name: '編輯',code: '002',event: () => {},more: {}},{type: 'details',id: '3',name: '詳情',code: '003',event: () => {},more: {}},// ...]event: () => {},more: {}}],more: {}
}

七、表單項

// input類型的可能沒有fieldValue,輸入什么就是什么,因為沒有options,加上options就變成了select類型
list: [ // form配置項{type: 'title'label: "title",},{type: 'input'label: "姓名",fieldName: '',fieldValue: '', // 可能沒有disabled:false,},{type: "amount",fieldName: "price",fieldValue: '',label: "單價(元)",attrs: {placeholder: "銷售單價(元)",},disabled:false,},{type: "phone",label: "電話",fieldName: "price",fieldValue: '',required: true,attrs: {placeholder: "請輸入電話",},disabled:false,},{type: 'postalcode'label: "郵政編碼",fieldName: '',fieldValue: '', // 可能沒有disabled:false,},{type: "images",label: "圖片",fieldName: "price",fieldValue: '',attrs: {placeholder: "圖片",},},{type: "file",label: "上傳",fieldName: "price",fieldValue: '',valueType: "string", // string | string[] | object[]group:{moduleCode:'1', // 區分是哪一個字段上傳的附件},model:null,visible: false,attrs:{fileKey:'url',nameKey:'name',disabled:false, fileMediatype: 'image',},},{type: "select",label: "收貨地址",fieldName: "",fieldValue: '',required: true,disabled:false,attrs: {placeholder: "請選擇收貨地址",disabled:false,options: [{label:'北京', value: 1},{label:'上海', value: 2},],},more: {}},{type: "select-remote",label: "負責人",fieldName: "personInChargeName",fieldValue: "personInChargeId",required: true,url: '/m-a-center/api/v1/a/pageList',method: 'get',res: ['res', 'payload', 'content'],map: [{key: 'label',target: 'userName',},{key: 'value',target: 'id',},],params: {query: 'keyword',default:{companyId: uni.getStorageSync('company-id'),page: 1,pageSize: 20,},},attrs: {placeholder: "請選擇負責人",disabled:false,options: [],},more: {}},// ...
],

八、一套配置實現多端開發

核心思想:組件和配置結合起來驅動開發、讓組件有秩序

九、定義規范配置模板

前端工程化:plop自動生成文件(快速開發,創建模板文件)_前端自動化生成文件-CSDN博客

十、配置文件得到業務文件的this

vue:.js 文件獲取到 .vue 文件中的 this_vue.js 獲取vue-CSDN博客

十一、寫在最后

我們首先明白一個事實 就是 總體的工作量是不會減少,是守恒的,一部分少做了工作,一定是另一部分多做了。就好像一句話“風雨安好,一定是有人在替你負重前行”。
定義配置這份工作我們是想1實現減少重復的工作,2讓擅長的人做擅長的事,以提高開發效率。
并不是以所謂配置為名,進行工作轉移,比如把前端工作轉移給后端,這樣違背了分工的意義/專業的人做專業的事情。
如果配置走的極端一點,通過url的參數識別業務,在頁面請求接口,接口返回左右的頁面結構和數據以及交互規則,那么這樣前端無需做任何工作,即可實現,那么這是提高效率了嗎,并沒有,反而很大程度增加了工作量,降低了效率,為什么,因為這個過程中工作量沒有減少,只是進行了轉移,把前端的工作全部轉移給了后端去做,讓不擅長的人做不擅長的工作,這個與初衷是違背的。并且失去了靈活性,不利開發。

十二、歡迎交流指正

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66061.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

43.Textbox的數據綁定 C#例子 WPF例子

固定最簡步驟,包括 XAML: 題頭里引入命名空間 標題下面引入類 box和block綁定屬性 C#: 通知的類,及對應固定的任務 引入字段 引入屬性 屬性雙觸發,其中一個更新block的屬性 block>指向box的屬性 從Textbo…

excel按行檢索(index+match)

假設你的數據表如下: 假設 數據區域是 A1:D4。 你想查詢某人在某個日期的數據。 實現步驟 公式 在某個單元格中使用以下公式: excel 復制代碼 INDEX(A2:D4, MATCH(“張三”, A2:A4, 0), MATCH(“2025/01/02”, A1:D1, 0)) 2. 公式拆解 MATCH(“張三”,…

信創改造-龍蜥操作系統搭載MySql、Tomcat等服務

龍蜥操作系統 Anolis OS 8 是 OpenAnolis 社區推出的完全開源、中立、開放的發行版,它支持多計算架構,也面向云端場景優化,兼容 CentOS 軟件生態。Anolis OS 8 旨在為廣大開發者和運維人員提供穩定、高性能、安全、可靠、開源的操作系統服務。…

FPGA EDA軟件的位流驗證

位流驗證,對于芯片研發是一個非常重要的測試手段,對于純軟件開發人員,最難理解的就是位流驗證。在FPGA芯片研發中,位流驗證是在做什么,在哪些階段需要做位流驗證,如何做?都是問題。 我們先整體的…

px、em 和 rem 的區別:深入理解 CSS 中的單位

文章目錄 前言一、px - 像素 (Pixel)二、em - 相對父元素字體大小 (Ems)三、rem - 相對于根元素字體大小 (Root Ems)四、綜合比較結語 前言 在CSS中,px、em和rem是三種用于定義尺寸(如寬度、高度、邊距、填充等)的長度單位。它們各自有不同的…

【CI/CD構建】關于不小心將springMVC注解寫在service層

背景 之前寫一個接口的時候沒有察覺到將RequestBody這個注解帶到service層了。 今天提交代碼的時候,插件沒有檢測到這個低級錯誤,導致試飛構建連maven編譯都過不了,maven找不到程序包org.springframework.web.bind.annotation這個包 結果…

Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫

Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫 目錄 Oracle Dataguard(主庫為雙節點集群)配置詳解(4):配置備庫一、為備庫配置靜態監聽1、配置 li…

《深入理解Mybatis原理》Mybatis中的緩存實現原理

一級緩存實現 什么是一級緩存? 為什么使用一級緩存? 每當我們使用MyBatis開啟一次和數據庫的會話,MyBatis會創建出一個SqlSession對象表示一次數據庫會話。 在對數據庫的一次會話中,我們有可能會反復地執行完全相同的查詢語句&…

win32匯編環境,窗口程序中單選框的一般操作示例

;運行效果 ;win32匯編環境,窗口程序中單選框的一般操作示例 ;比如在窗口程序中生成單選框,默認哪項選中,判斷當前選中哪一項,讓哪項選中,得到選中項的名稱等 ;直接抄進RadAsm可編譯運行。重點部分加備注。 ;以下是ASM文件 ;>&g…

從transformer到informer

Transformer和Informer都是深度學習領域中的模型架構,它們主要用于處理序列數據,如自然語言處理(NLP)和時間序列預測任務。 **Transformer**: Transformer模型最初在2017年由Google的研究者提出,它在NLP領…

hive知識體系

hive知識體系 hive知識體系 鏈接: 1Hive概覽 鏈接: 2Hive表類型 鏈接: 3Hive數據抽樣 鏈接: 4Hive計算引擎 鏈接: 5Hive存儲與壓縮 鏈接: 6Hive Sql 大全 鏈接: 6Hive Sql 大全-Hive 函數 鏈接: 6Hive Sql 大全-窗口函數 鏈接: 7Hive執行計劃 鏈接: 8Hive SQL底層執行原理 鏈接…

優化 Azure Synapse Dedicated SQL Pool中的 SQL 執行性能的經驗方法

在 Azure Synapse Dedicated SQL Pool中優化 SQL 執行涉及了解底層體系結構(例如分布和分區)、查詢優化(例如避免不必要的子查詢和聯接),以及利用具體化視圖和 PolyBase 等工具進行高效數據加載。 1.有效使用分布和分…

個人主頁搭建全流程(Nginx部署+SSL配置+DCDN加速)

前言 最近開始準備秋招,打算做一個個人主頁,以便在秋招市場上更有競爭力。 目前,現有的一些搭建主頁的博文教程存在以下一些問題: 使用Github Page進行部署,這在國內訪問容易受阻使用寶塔面板等框架,功能…

Spring MVC簡單數據綁定

【圖書介紹】《SpringSpring MVCMyBatis從零開始學(視頻教學版)(第3版)》_springspringmvcmybatis從零開始 代碼、課件、教學視頻與相關軟件包下載-CSDN博客 《SpringSpring MVCMyBatis從零開始學(視頻教學版)(第3版&…

嵌入式系統Linux實時化(四)Xenomai應用開發測試

1、Xenomai 原生API 任務管理 Xenomai 本身提供的一系列多任務調度機制,主要有以下一些函數: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任務的創建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…

如何在Ubuntu上安裝和配置Git

版本控制系統(VCS)是軟件開發過程中不可或缺的工具之一,它幫助開發者跟蹤代碼變更、協作開發以及管理不同版本的項目。Git作為當前最流行的分布式版本控制系統,因其高效性和靈活性而廣受青睞。本文將指導你如何在Ubuntu操作系統上…

[python] bisect_right

等價于C中的upper_bound bisect_right 函數介紹 在Python的 bisect 模塊中, bisect_right (別名 bisect )用于在有序序列中查找插入點。插入點是在序列中插入元素后,序列仍保持有序的位置。 bisect_right 函數返回的插入點是在已…

Mac上安裝Label Studio

在Mac上安裝Anaconda并隨后安裝Label Studio,可以按照以下步驟進行: 1. 在Mac上安裝Anaconda 首先,你需要從Anaconda的官方網站下載適用于Mac的安裝程序。訪問Anaconda官網,點擊“Download Anaconda”按鈕,選擇適合M…

vscode開啟調試模式,結合Delve調試器調試golang項目詳細步驟

1.前期準備 (1).在vs code中的擴展程序中搜索并安裝Go擴展程序 (2).安裝 Delve 調試器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打開vs code的命令面板,輸入Go: Install/Update Tools,并單擊該命令執行,安裝或更新Go語…

SQL面試題1:連續登陸問題

引言 場景介紹: 許多互聯網平臺為了提高用戶的參與度和忠誠度,會推出各種連續登錄獎勵機制。例如,游戲平臺會給連續登錄的玩家發放游戲道具、金幣等獎勵;學習類 APP 會為連續登錄學習的用戶提供積分,積分可兌換課程或…