全球快报:低代码平台组件间通信方案复盘
背景介绍3年前我开发了一款零代码搭建平台H5-Dooring,主要目的是想用更低的成本,更快的效率,上线web页面(其实是不想写重复的代码了,写麻了
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从零开发全栈文档编辑器(进阶实战
点个在看你最好看
背景介绍3年前我开发了一款零代码搭建平台H5-Dooring,主要目的是想用更低的成本,更快的效率,上线web页面(其实是不想写重复的代码了,写麻了
刚刚在拉斯维加斯举行的2023国际消费类电子产品展览会(CES)上,BMWi数字情感交互概念车(Dee)进行了全球首发,宝马集团展示了其对未来车内
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
中国网是国务院新闻办公室领导,中国外文出版发行事业局管理的国家重点新闻网站。本网通过10个语种11个文版,24小时对外发布信息,是中国进行
原标题:短短半个月,已经有5位明星的父母去世,何炅最令人心酸虽说生老病死人之常情,但父母子女一场,见证着父母的离世是多么痛心疾首的一件
参考消息网1月6日报道据新加坡《联合早报》网站1月6日报道,英国哈里王子西班牙文版的自传5日在西班牙提前发售,哈里在这(@参考消息)
中新网1月6日电 在6日举行的新闻发布会上,国家邮政局副局长陈凯介
微芯生物(SH688321,收盘价:22 92元)1月5日晚间发布公告称,深圳微芯生物科技股份有限公司高级管理人员暨核心技术人员宁志强博士和高级管理人
微信搜一搜如何领取红包封面:在微信搜索红包封面、微信红包封面、新年红包封面,可以直达新年红包封面会场。你可以选择进入超级品牌专区、摇
东航物流:东航物流关于5%以上股东减持股份结果公告
湖南省人民政府关于孟祥定等同志职务任免的通知湘政人〔2022〕21号各市州人民政府,省政府各厅委、各直属机构:省人民政府
由苏伦导演、编剧,雷佳音、张小斐、张宥浩领衔主演,沙溢、刘敏涛特别出演,丁嘉丽、吴彦姝、杨恩又主演,岳云鹏、杨迪特邀出演的合家欢喜剧
证券时报e公司讯,据中国软件消息,近日,中国电子旗下飞腾公司、麒麟软件、达梦数据聚焦全链路关键技术应用研究,助力南方电网公司及所属南网
报告显示,2022年员工整体离职率为17 9%,与2021年相比,下降0 9个百分点,人员流动整体较去年放缓。报告显示,2022年员工整体离职率为17 9%,
本文来源:时代财经作者:刘子琪因抗病毒抗菌面料走红的安奈儿(002875 SZ)股价跳水!1月4日,安奈儿开盘大跌近5%,全天震荡走低,尾盘跳水跌近
卡塔尔世界杯已经结束了,卡塔尔世界杯上最大的赢家,毫无疑问就是梅西。梅西带领阿根廷队获得了世界杯的冠军,他也成为了第三代球王。对梅西
同花顺数据中心显示,创元科技1月3日获融资买入220 58万元,占当日买入金额的16 07%,当前融资余额3 48亿元,占流通市值的9 92%,低于历史10%
迪丽热巴这个瓜,就像电视剧,有预告、正剧、收尾。最开始是在2022圣诞节之前,有狗仔预告将爆料顶流小花生孩子的瓜。那时候,迪丽热巴就是被
三柏硕(SZ001300,收盘价:15 65元)1月3日晚间发布公告称,王娟女士因个人原因,申请辞去公司副总经理、董事会秘书职务。王娟女士辞职后,将不
1、银耳过夜不建议吃。2、因为过夜银耳的营养成分会出现流失,还有可能会产生一些亚硝酸盐,当人体摄入大量的亚硝酸盐时,会影响人体红细胞携
开年首日金山区重大产业项目集中开工,12个项目总投资91亿元1月3日,金山区2023年开年首日金山区重大产业项目集中开工活动暨大信·中信海直无
12月28日,环球新材国际(06616 HK)发布公告,发行最高达5亿离岸人民币的3 5%票面可换股债券。该次可换股债券包括本金金额为3亿离岸人民币的A
证券时报e公司讯,①梦网科技子公司深圳梦网近日与联通在线签署《智信技术服务合同》,深圳梦网将为“智信”产品解决方案,提供技术支撑服务。
有投资者在投资者互动平台提问:现在,美国、俄罗斯正在爆发10几年来最严重的流感疫情。达菲作为治疗流感的特效药物。莽草酸是罗氏生产达菲的
据今日俄罗斯电视台网站2022年12月30日报道,据俄罗斯财政部长安东·西卢安诺夫透露,俄财政部打算从2023年起用人民币补充国家财富基金,此举
Copyright 2015-2022 热讯酒业网 版权所有 备案号:豫ICP备20005723号-6 联系邮箱:29 59 11 57 8@qq.com