前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件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的参数识别业务,在页面请求接口,接口返回左右的页面结构和数据以及交互规则,那么这样前端无需做任何工作,即可实现,那么这是提高效率了吗,并没有,反而很大程度增加了工作量,降低了效率,为什么,因为这个过程中工作量没有减少,只是进行了转移,把前端的工作全部转移给了后端去做,让不擅长的人做不擅长的工作,这个与初衷是违背的。并且失去了灵活性,不利开发。
十二、欢迎交流指正
相关文章:
前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置,在爬虫爬取网站文章时候,会输入给爬虫一个配置文件,里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…...
Swagger生成Api文档的增强解决方案--knife4j
方法一: 使用步骤 1.导入 knife4j 的maven坐标 在pom.xml中添加依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.5.0</ver…...
Node.js - HTTP
1. HTTP请求 HTTP(Hypertext Transfer Protocol,超文本传输协议)是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端(通常是浏览器、手机应用或其他网络工具)发送给服务器的消息,用来请求资源或执行…...
LangChain学习笔记2 Prompt 模板
安装 langchain 库 pip install langchain1、概念:提示和提示工程 在大语言模型(LLMs)时代,通过简单地更改提示中的指令,同一个模型可以执行多种任务。这一特性让 LLMs 在各类应用场景中都显得非常灵活和强大。然而&…...
如何在gitlab cicd中实现每月10号上午执行
在 GitLab CI/CD 中,可以通过设置定时触发器(Schedules)和脚本中的时间判断逻辑结合,确保任务只在每月 10 号的上午运行。 以下是实现的步骤: 1. 设置定时触发器 GitLab 提供了 Schedules 功能,可以指定每…...
SimpleFOC |SimpleFOC学习笔记汇总
在机器人领域,掌握无刷电机的控制相当于掌握机器人设计的“半壁江山”。这个年代,对个人来说学习一种新技术最好是通过开源项目了。通过开源项目快速将项目搭建起来,接着结合实践与理论才能真正掌握技术。 入门FOC,我认为最合适是…...
OpenArk64:Windows 系统分析与逆向工程工具详解
引言 在 Windows 系统的底层操作和逆向工程领域,OpenArk 是一款备受推崇的开源工具集。而 OpenArk64.exe 是 OpenArk 工具的 64 位版本,专门用于 64 位 Windows 系统。它提供了强大的功能,帮助用户深入分析系统内核、进程、文件、注册表等&a…...
数据储存与管理【大数据导论】
这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:大数据入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1…...
《从零到一:搭建高效体育直播网站的全流程技术指南》
搭建一个体育直播网站需要综合考虑技术架构、数据来源、用户体验、安全性等多个层面。从整体到细节,搭建这样一个网站的流程比较复杂,但可以分成几个重要的步骤和技术环节。以下是搭建体育直播网站的技术层面准备全流程: 一、需求分析与规划 …...
松散比较(PHP)(小迪网络安全笔记~
免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…...
一文了解如何使用 DBeaver 管理 DolphinDB
在日常的数据开发、分析和数据库运维中,一款优秀的 IDE 能够极大地提升工作效率。DBEaver 是一款由 Java 编写的一站式跨平台连接器,其社区版本已能支持连接近百种数据库,受到广大开发者的喜爱。近期。DolphinDB 与 DBeaver 团队共同努力&…...
网络基础知识指南|1-20个
1. IP地址: 即互联网协议地址,是用于标识互联网上的每一个设备或节点的唯一地址。IP地址的作用主要是进行网络设备的定位和路由,确保数据包可以从源设备准确地传送到目标设备。2. 子网掩码: 是用于将一个IP地址划分为网络地址和主机地址的工具。它通常与…...
01.09周四F34-Day50打卡
文章目录 1. -我大衣呢? -就在上次你放的地方。2. 这所学校是在曾经的影院上建立起来的。3. 她今天落到这个地步都怪你。4. 留得青山在,不怕没柴烧。(一息尚存,希望不灭。)5. 有善良的地方就有美德,有美德的地方就有奇迹。(《灰姑娘》原句)6. 为了和老外说话时不再发窘,所…...
Linux简介和环境搭建
Linux 介绍和环境搭建 1、发行版本 Linux 操作系统有多个主流发行版本,每个版本根据不同的目标、特点和使用场景为用户提供了不同的功能和体验。 Ubuntu • 特点:Ubuntu 是最为人熟知的 Linux 发行版之一,强调易用性和用户友好性ÿ…...
在移动端开发图表,uniapp+echarts,需要特殊处理,使用renderjs
1.首先要创建一个组件warning,用来装图表(我排除绿色那段代码为我的需求,不是必要代码) <template> <div class="task_container"> <div class="pop_body"> <div class="footer"> <warning…...
SpringBoot之LazyInitializationBeanFactoryPostProcessor类源码学习
源码分析 /**** author Andy Wilkinson* author Madhura Bhave* author Tyler Van Gorder* author Phillip Webb* since 2.2.0* see LazyInitializationExcludeFilter** 主要用于延迟初始化 Bean 的配置。它通过修改 BeanFactory 的配置来确保某些 Bean 在实际需要时才进行初始…...
United States of America三种表示
"United States of America", "United States", 和 "America" 都表示美国,但它们的使用场景和背景略有不同。以下是关于为什么这些名称可以合在一起表示美国的详细解释: 1. "United States of America" 全称&a…...
OpenCV基于均值漂移算法(pyrMeanShiftFiltering)的水彩画特效
1、均值漂移算法原理 pyrMeanShiftFiltering算法结合了均值迁移(Mean Shift)算法和图像金字塔(Image Pyramid)的概念,用于图像分割和平滑处理。以下是该算法的详细原理: 1.1 、均值迁移(Mean …...
【C++】拷贝构造函数与运算符重载
写在前面 拷贝构造函数、赋值运算符重载、取地址运算符都是属于类的默认成员函数! 默认成员函数是程序猿不显示声明定义,编译器会中生成。 在程序编写中,我们也经常使用拷贝的方式来获取到对应的值,例如整形变量拷贝int a 0; i…...
2024年开发语言热度排名
随着技术的不断发展和变化,编程语言的热度也在不断演变。2024年即将到来,我们有必要回顾和展望当前和未来的开发语言市场。本文将基于多个因素,包括行业需求、社区支持、流行度以及新兴趋势,对2024年的开发语言热度进行排名和分析…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
