当前位置:首页 > 科技  > 软件

低代码平台组件间通信方案复盘

来源: 责编: 时间:2023-09-28 10:05:26 478观看
导读背景介绍3年前我开发了一款零代码搭建平台 H5-Dooring, 主要目的是想用更低的成本, 更快的效率, 上线 web 页面(其实是不想写重复的代码了,写麻了). 好在陆陆续续折腾了3年, 目前已经可以满足基本的页面设计和搭建能

背景介绍

3年前我开发了一款零代码搭建平台 H5-Dooring, 主要目的是想用更低的成本, 更快的效率, 上线 web 页面(其实是不想写重复的代码了,写麻了). 好在陆陆续续折腾了3年, 目前已经可以满足基本的页面设计和搭建能力, 并能快速上线页面.ZYA28资讯网——每日最新资讯28at.com

之前也在社区分享了很多低代码和零代码的技术实现, 接下来继续和大家聊聊低代码平台中组件与组件之间的通信方案设计.ZYA28资讯网——每日最新资讯28at.com

可视化搭建平台的基本能力

根据我自己设计可视化搭建平台的经验, 其需要具备最最基本的两个能力:ZYA28资讯网——每日最新资讯28at.com

  • 静态页面设计能力(也就是可以用可视化平台制作我们想要的页面的能力)
  • 组件交互能力(制作好静态页面之后, 页面元素能具备一定的交互, 比如跳转链接, 打开弹窗等)

以上的能力可以让我们将页面通过拖拽的方式搭建出来:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

虽然这已经可以满足很多展示型的需求, 但是仍然存在局限性, 比如可视化平台的组件与组件之间, 没办法相互通信.ZYA28资讯网——每日最新资讯28at.com

更灵活自主的可视化搭建平台

这里给大家举一个实际的场景, 比如我们要做一个转盘H5页面, 它由转盘组件和按钮组件组成, 当点击按钮时, 转盘开始运动:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

这种场景就需要转盘组件和按钮组件相互通信, 来实现交互功能. 所以在可视化搭建平台中, 如果能实现组件间的通信, 那将覆盖更多的业务场景, 从而为个人或者企业带来更大的价值.ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

接下来我将和大家分享一下低代码平台中组件间通信的几种方案, 共大家学习参考.ZYA28资讯网——每日最新资讯28at.com

组件间通信的几种实现方案

图片图片ZYA28资讯网——每日最新资讯28at.com

说到组件通信我们也许并不陌生, 比如在 vue 或者 React 框架中, 经常会涉及到父子组件通信以及组件与组件间的通信, 常用的方案也有很多, 比如:ZYA28资讯网——每日最新资讯28at.com

  1. props/$emit
  2. 子组件向父组件传值
  3. eventBus($emit/$on)
  4. vuex / redux
  5. $attrs/$listeners
  6. provide/inject

当然还有很多方式能帮我们实现传统组件间的通信, 那我们在低代码组件中, 也可以参考类似的方式来实现, 但是唯一的区别是需要设计一套规则, 来保证组件间通信可以通过用户配置的方式来运转.ZYA28资讯网——每日最新资讯28at.com

接下来我们来分析几种低代码组件间的通信方案.ZYA28资讯网——每日最新资讯28at.com

1.websocket

在设计组件通信方案前, 我们需全局维护一个公共的状态, 拿 H5-Dooring可视化平台 举例, 我们用 redux 管理公共状态, 组件间通信本质就是触发公共状态的更新:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

为了保证低代码组件库足够纯净, 比如不应该在组件里连接 redux, 所以我们需要把 redux 触发器 dispatch 放在页面的全局, 这里就可以用 websocket, 在组件里触发 socket 指令,  在页面全局来监听, 并触发 dispatch :ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

当然使用 socket 的方式仍然会让低代码组件库负重前行(虽然能实现更自由的通信场景, 比如组件自更新, 生命周期回调, 控制业务钩子等), 因为我们不得不为其搭建 socket 服务, 并且需要为其设计稳定的通信桥梁, 比如 socket 心跳连接等.ZYA28资讯网——每日最新资讯28at.com

2.iframe通信 postmessage

利用 iframe 的 postmessage 等 API 虽然也能实现组件间通信, 但是我们需要设计一套通信机制, 保证 iframe 能接受组件传送的指令, 并对外暴露共享状态:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

我们从 Iframe 的通信模式可以发现它不仅可以作为中间桥梁起到通信作用, 有点类似于 eventBus的模式, 而且还可以实现页面间的通信, 比如目前很多微前端架构的底层支持也有采用 iframe 来设计的. 但是对于更细粒度的低代码组件来说, 有点小题大作了.ZYA28资讯网——每日最新资讯28at.com

接下来给大家分享一下 iframe 通信的基本代码实现:ZYA28资讯网——每日最新资讯28at.com

// 父页面和子页面通信// A.html (父)<iframe src="http://h5.dooring.cn/h5_plus" frameborder="1" id="Bframe"></iframe>const msg = {    name: "H5-Dooring"  }window.onload = () => {  // 自动调用必须放在onload中,通过事件调用则不用  // let frame = document.querySelector("#Bframe").contentWindow  let frame = 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 (父)<iframe src="http://h5.dooring.cn/h5_plus" frameborder="1" id="Bframe"></iframe>window.addEventListener("message", (e) => {  console.log(e.data)  console.log(e.origin)  console.log(e.source)})// B.htmlconst msg = {  name: "Dooring H5"}window.top.postMessage(msg, "http://h5.dooring.cn/preview")

3.Event Emitters

Event Emitters 的方式我觉得是最适合低代码组件间通信的方案, 类似于 js 里的事件监听机制, 我们可以给 dom 绑定监听, 并暴露事件给用户来实现手动触发机制. (虽然不一定是用户手动触发, 也有一种情况是逻辑触发, 比如当页面某个组件到达某一状态的时候, 后自动触发事件, 来改变其他组件的状态)ZYA28资讯网——每日最新资讯28at.com

Event Emitters 类似一种观察者模式, 我们可以利用 javascript 的设计模式来实现它, 并在组件内部来监听或者触发, 一个简单的实现如下:ZYA28资讯网——每日最新资讯28at.com

interface Events {  [key: string]: Function[];}export class EventEmitter {  public events: Events;  constructor(events?: Events) {    this.events = events || {};  }  public subscribe(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)    };  }  public emit(name: string, ...args: any[]): void {    (this.events[name] || []).forEach(fn => fn(...args));  }}

具体设计流程有点像我之前设计的 iframe 通信架构, 不过使用起来会更简单:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

低代码组件事件队列设计

以上只实现了组件的通信, 并没有将通信和实际的应用场景结合起来, 比如低代码用户需要如何操作,才能实现组件通信. 这里我之前也设计了一套模型:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

每个组件都有一套事件列表, 用户可以给一个组件添加多个交互事件, 在第代码内部通过循环遍历来依次触发事件队列:ZYA28资讯网——每日最新资讯28at.com

图片图片ZYA28资讯网——每日最新资讯28at.com

事件通信就可以用上面介绍的 Event Emitters来实现, 具体的低代码模式可以参考我之前的项目:ZYA28资讯网——每日最新资讯28at.com


ZYA28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-11816-0.html低代码平台组件间通信方案复盘

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 还不会部署微服务项目?保姆级教程来啦!

下一篇: Postman脚本批量转接口自动化用例

标签:
  • 热门焦点
  • Redmi Pad评测:红米充满野心的一次尝试

    从Note系列到K系列,从蓝牙耳机到笔记本电脑,红米不知不觉之间也已经形成了自己颇有竞争力的产品体系,在中端和次旗舰市场上甚至要比小米新机的表现来得更好,正所谓“大丈夫生居
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大&ldquo;烤&rdquo;之下的除了众生,还有各大企业发布的ESG报告。ESG是&ldquo;环境保
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
Top