低代码平台组件间通信方案复盘
3年前我开发了一款零代码搭建平台 H5-Dooring, 主要目的是想用更低的成本, 更快的效率, 上线 web 页面(其实是不想写重复的代码了,写麻了). 好在陆陆续续折腾了3年, 目前已经可以满足基本的页面设计和搭建能力, 并能快速上线页面.
之前也在社区分享了很多低代码和零代码的技术实现, 接下来继续和大家聊聊低代码平台中组件与组件之间的通信方案设计.
可视化搭建平台的基本能力根据我自己设计可视化搭建平台的经验, 其需要具备最最基本的两个能力:
(资料图片仅供参考)
静态页面设计能力(也就是可以用可视化平台制作我们想要的页面的能力)组件交互能力(制作好静态页面之后, 页面元素能具备一定的交互, 比如跳转链接, 打开弹窗等)以上的能力可以让我们将页面通过拖拽的方式搭建出来:
虽然这已经可以满足很多展示型的需求, 但是仍然存在局限性, 比如可视化平台的组件与组件之间, 没办法相互通信.
更灵活自主的可视化搭建平台这里给大家举一个实际的场景, 比如我们要做一个转盘H5页面, 它由转盘组件和按钮组件组成, 当点击按钮时, 转盘开始运动:
这种场景就需要转盘组件和按钮组件相互通信, 来实现交互功能. 所以在可视化搭建平台中, 如果能实现组件间的通信, 那将覆盖更多的业务场景, 从而为个人或者企业带来更大的价值.
接下来我将和大家分享一下低代码平台中组件间通信的几种方案, 共大家学习参考.
组件间通信的几种实现方案说到组件通信我们也许并不陌生, 比如在 vue或者 React框架中, 经常会涉及到父子组件通信以及组件与组件间的通信, 常用的方案也有很多, 比如:
props/$emit子组件向父组件传值eventBus($emit/$on)vuex / redux$attrs/$listenersprovide/inject当然还有很多方式能帮我们实现传统组件间的通信, 那我们在低代码组件中, 也可以参考类似的方式来实现, 但是唯一的区别是需要设计一套规则, 来保证组件间通信可以通过用户配置的方式来运转.
接下来我们来分析几种低代码组件间的通信方案.
1.websocket在设计组件通信方案前, 我们需全局维护一个公共的状态, 拿 H5-Dooring可视化平台 举例, 我们用 redux管理公共状态, 组件间通信本质就是触发公共状态的更新:
为了保证低代码组件库足够纯净, 比如不应该在组件里连接 redux, 所以我们需要把 redux触发器 dispatch放在页面的全局, 这里就可以用 websocket, 在组件里触发 socket指令, 在页面全局来监听, 并触发 dispatch:
当然使用 socket的方式仍然会让低代码组件库负重前行(虽然能实现更自由的通信场景, 比如组件自更新, 生命周期回调, 控制业务钩子等), 因为我们不得不为其搭建 socket服务, 并且需要为其设计稳定的通信桥梁, 比如 socket心跳连接等.
2.iframe通信 postmessage利用 iframe的 postmessage等 API虽然也能实现组件间通信, 但是我们需要设计一套通信机制, 保证 iframe能接受组件传送的指令, 并对外暴露共享状态:
我们从 Iframe的通信模式可以发现它不仅可以作为中间桥梁起到通信作用, 有点类似于 eventBus的模式, 而且还可以实现页面间的通信, 比如目前很多微前端架构的底层支持也有采用 iframe 来设计的. 但是对于更细粒度的低代码组件来说, 有点小题大作了.
接下来给大家分享一下 iframe通信的基本代码实现:
//父页面和子页面通信//A.html(父)3.Event Emittersconstmsg={name:"H5-Dooring"}window.onload=()=>{//自动调用必须放在onload中,通过事件调用则不用//letframe=document.querySelector("#Bframe").contentWindowletframe=window.frames[0]frame.postMessage(msg,"http://h5.dooring.cn/preview")}//B.htmlwindow.addEventListener("message",(e)=>{console.log(e.data)console.log(e.origin)console.log(e.source)})//子页面和父页面通信//A.html(父) window.addEventListener("message",(e)=>{console.log(e.data)console.log(e.origin)console.log(e.source)})//B.htmlconstmsg={name:"DooringH5"}window.top.postMessage(msg,"http://h5.dooring.cn/preview")
Event Emitters的方式我觉得是最适合低代码组件间通信的方案, 类似于 js里的事件监听机制, 我们可以给 dom绑定监听, 并暴露事件给用户来实现手动触发机制. (虽然不一定是用户手动触发, 也有一种情况是逻辑触发, 比如当页面某个组件到达某一状态的时候, 后自动触发事件, 来改变其他组件的状态)
Event Emitters类似一种观察者模式, 我们可以利用 javascript 的设计模式来实现它, 并在组件内部来监听或者触发, 一个简单的实现如下:
interfaceEvents{[key:string]:Function[];}exportclassEventEmitter{publicevents:Events;constructor(events?:Events){this.events=events||{};}publicsubscribe(name:string,cb:Function){(this.events[name]||(this.events[name]=[])).push(cb);return{unsubscribe:()=>this.events[name]&&this.events[name].splice(this.events[name].indexOf(cb)>>>0,1)};}publicemit(name:string,...args:any[]):void{(this.events[name]||[]).forEach(fn=>fn(...args));}}
具体设计流程有点像我之前设计的 iframe通信架构, 不过使用起来会更简单:
低代码组件事件队列设计以上只实现了组件的通信, 并没有将通信和实际的应用场景结合起来, 比如低代码用户需要如何操作,才能实现组件通信. 这里我之前也设计了一套模型:
每个组件都有一套事件列表, 用户可以给一个组件添加多个交互事件, 在第代码内部通过循环遍历来依次触发事件队列:
事件通信就可以用上面介绍的 Event Emitters来实现, 具体的低代码模式可以参考我之前的项目:
H5-Dooring可视化低代码平台
总结后续我会继续和大家分享一下 H5-Dooring 低代码的更多实践和思考, 如果大家对可视化低代码感兴趣也可以参考我的低代码可视化专栏.
下一篇文章我会和大家分享一下低代码印章组件的实现方案, 大家有更多好的建议也可以随时和我反馈.
H5-dooring低代码
V6.Dooring可视化大屏搭建平台
从零搭建全栈可视化大屏制作平台V6.Dooring
从零设计可视化大屏搭建引擎
Dooring可视化搭建平台数据源设计剖析
可视化搭建的一些思考和实践
基于Koa + React + TS从零开发全栈文档编辑器(进阶实战
点个在看你最好看
推荐文章
- 低代码平台组件间通信方案复盘
- 每日消息!山楂吃了会上火吗?
- 算法岗没技术积累,要换组吗?
- 全球观天下!A股,一个重要信号来了,明天,会大涨拿下3200点吗?
- 兄弟分家协议要注意什么
- 美媒:美国将加强对关键基础设施网络安全监管
- 养老金生存认证,所有地方截止时间都为12月?认证方法有哪些 全球新要闻
- 欧洲议会议员:欧盟制裁对俄影响“小于零”
- 外媒:哈里自传西班牙提前发售 自曝在阿富汗夺25条人命 天天新视野
- 信用社申报债权需要提供哪些材料
- 推动三江之源生物安全法治建设-即时焦点
- 莆田6岁子女抚养费给多少钱
- 焦点热文:易方达中证稀土产业ETF净值上涨1.03% 请保持关注
- 苗侨伟返港约众好友相聚,卢海鹏夏雨罕见现身,现场为戚美珍庆生
- 天天快消息!福特F-150猛禽开启新一轮定购 官方售价人民币72.08万元
- 韩媒:游戏成文化,近六成韩国家长陪孩子一起打游戏:焦点要闻
- 今日热讯:RCEP对印尼生效 中国与印尼经贸合作迎新机遇
- 大豪科技:再次建议您学习一下宪法和民法通则,再学习一点公司法和证券法
- 郑州市油价是多少?(持续更新)_热讯
- 当前报道:独家资金:早盘主力买入前10股
- 锐龙7000销量不佳?还不到锐龙5000的五分之一:世界快看
- 盒马鲜生实现盈利 新零售进入成熟期
- 世界观速讯丨中央财政下达2022年第二笔农业保险保费补贴
- 环球热点!赌王颁奖时利智坐在观众席,五官清纯眼波荡漾,嫁李连杰幸福到现在
- 大行评级 | 瑞信:上调中金公司(3908.HK)目标价至19.4港元 评级“跑赢大市”
- 方正证券:维持本轮行情是底部反转的判断
- 焦点快看:新股解读 “双碳”打开石墨电极行业需求,升能集团业绩触底回升
- “阳康”了能喝奶茶咖啡吗?专家:问题不大 天天最新
- 男方家暴需要证据才能离婚吗
- “玩潮宇宙”落成,Z世代迎来以“圈”会友的社交新场域:焦点信息
- 为梦想奋进拼搏 因热爱勇毅前行
- 国际油价30日显著上涨:当前动态
- 天天快播:证监会出手,富途、老虎被禁止招揽境内投资者和开立新账户…公司紧急回应!
- 硕世生物:员工持股平台拟合计减持不超过1.58%公司股份|全球看点
- 港股异动 | 飞鱼科技(01022)升近13% 旗下手游《神仙道3》获发版号 计划23年及之后新推7款游戏:消息
- 【独家】“晒冬”正当时 腊味飘香年味渐浓
- 天天热门:阳了?没阳?
- 焦点简讯:雪花纷飞!广西多地迎来2022年首场降雪
- 全球观察:云里物里(872374)12月29日游资资金净卖出26.94万元
- [快讯]威唐工业:关于特定股东减持计划时间届满实施情况:要闻速递
- 23青岛债11今日发布发行公告|每日看点
- 华胜天成: 2022年员工持股计划管理办法
- 赛特新材:拟为全资子公司安徽赛特提供担保金额不超过2亿元|环球热头条
- 当前视讯!自查!血糖超过这个数,易诱发并发症,医生3招教你如何预防
- 每日讯息!鄞州人才公寓租住申请对象有哪些?
- 2023中南大学湘雅二医院招聘医师+科研岗工作人员
- 快播:爱科科技:12月27日获融资买入87.43万元,占当日流入资金比例26.31%
- 平安i贷逾期34天会上征信吗
- 泓禧科技(871857)12月27日散户资金净卖出6.57万元_环球热讯
- 天天新消息丨灭蚊灯有噪音是怎么回事
- 小麻袋借贷借款逾期七年延迟还款征信会怎么样
- 【世界聚看点】促文旅消费恢复 首批6个北京微度假目的地品牌发布
- 武汉强力助推4个新城区发展 各新城区至少建成1所三甲医院
- 防虫丸是拆开拿出来用吗?
X 关闭
最新资讯
- 环球快讯:桔子分期逾期43年拖欠多久上征信
- 小金鱼借款逾期还款会对征信有影响吗|焦点热议
- 大宏立: 第四届监事会第六次会议决议公告
- 南天信息董秘回复:具体详见公司之前的相关-天天观点
- 华映科技:12月22日获融资买入113.64万元
- 当前播报:实物黄金能赚钱吗?现货黄金更容易赚钱?
- 【环球时快讯】《上海市船舶污染防治条例》表决通过,长三角协同立法又迈进一步
- 【独家焦点】前11个月上海海关空运渠道验放阿拉伯国家进口藏红花同比激增17倍
- 世界微动态丨H5开屏从龟速到闪电,企微是如何做到的
- 之江生物董秘回复:公式抗原产量目前供不应求,我司产能处于快速攀升期,为面对今后疫情日常监控做好充分准备:播资讯
- 【机构调研记录】西部利得基金调研中材国际、厦门钨业等3只个股(附名单) 全球百事通
- 中国航空业迎来重要拐点
- 全球热门:众智科技董秘回复:公司发电机组控制器产品中的并机型控制器广泛应用于数据中心应急电源冗余控制
- 数字乡村板块12月19日跌4.43%,国联股份领跌,主力资金净流出6.24亿元
- 东兴基金荣获和讯第20届中国财经风云榜“2022年度卓越成长性基金公司”
- 新农开发董秘回复:公司暂不涉及生产预制菜
- 当前报道:业务流程建模,细到几层?
- 达刚控股: 董事会关于公司股票价格波动未达到《深圳证券交易所上市公司自律监管指引第8号——重大资产重组》第十三条第(七)款相关标准的说明
- 上海市委常委兼常务副市长吴清:上海将加快建设具有全球竞争力的金融科技中心
- 建发股份(600153)12月16日主力资金净买入1806.71万元-焦点速递
- 永泰能源(600157):股份有限公司独立董事公司高管任职意见-环球短讯
- 劳动合同技术服务合同合同是怎样的
- 职务侵占罪与侵占罪要怎么去区分呢? 天天微速讯
- 全球聚焦:女人微信昵称好听唯美 唯美好听的女生微信网名
- 全球观察:美亚柏科董秘回复:上市公司每年都需要履行聘请审计机构的相关决策流程,本次是公司2022年度首次聘请审计机构
- 天天精选!12月14日基金净值:交银多策略回报灵活配置混合A最新净值1.45,跌0.07%
- 国网桐柏县供电公司:无人机成为智能巡检的“火眼金睛”
- 中京电子:公司将继续扩大PCB高新技术产品占比,并积极向半导体领域拓展布局
- 世界观点:帅丰电器: 浙江帅丰电器股份有限公司关于使用部分闲置募集资金进行现金管理的进展公告
- 马斯克世界首富让位 特斯拉(TSLA.US)今年市值缩水过半 全球今热点
- 【播资讯】宠物经济板块12月12日跌0.05%,豪悦护理领跌,主力资金净流入3068.62万元
- 双子座在2023春节的正缘星座 恋爱运势情况
- 亚宝药业董秘回复:公司可用于儿童发热、咽痛:当前信息
- 【全球独家】本周盘点(12.5-12.9):羚锐制药周跌0.57%,主力资金合计净流出1629.85万元
- 世界微动态丨声迅股份(003004)12月8日主力资金净卖出2723.34万元
- 每日动态!冬季装暖指南,省心装暖不踩坑
- 知识 水表怎么安装水表安装方法
- 知识 周记的格式和写法
- 知识 无烟灶的制作与方法
- 知识 国五标准符号
- 知识 的可变电容器的电容是什么
- 知识 盛京银行信用卡有哪些卡种
- 知识 林冲怎么死的
- 知识 肉赘怎么去除
- 知识 湘雅附一和附二有什么区别
- 知识 24道拐在哪个省哪个地区
- 知识 沈阳景区有哪些地方好玩
- 知识 梓的寓意是什么意思
- 百科 手机内存卡怎么格式化
- 知识 missing9的演员
X 关闭